2012-03-24 14 views
5

¿Hay alguna manera de colocar un BufferedReader en una cadena en una sola toma, en lugar de línea por línea? Aquí es lo que tengo hasta ahora:¿Cómo se pone el contenido de un BufferedReader en una cadena?

  BufferedReader reader = null; 
      try 
      { 
       reader = read(filepath); 
      } 
      catch (Exception e) 
      { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
       String line = null; 
       String feed = null; 
       try 
       { 
        line = reader.readLine(); 
       } 
       catch (IOException e) 
       { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 


       while (line != null) 
       { 
        //System.out.println(line); 
        try 
        { 
         line = reader.readLine(); 
         feed += line; 
        } 
        catch (IOException e) 
        { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 
       } 
     System.out.println(feed); 

Respuesta

1

Si conoce la duración de su entrada (o un límite superior a la misma) se puede leer todo el asunto a una matriz de caracteres, utilizando read(char[],int,int), a continuación, utilizar eso para construir una cuerda. No importa si su tercer parámetro (len) es mayor que el tamaño, el método devolverá la cantidad de caracteres leídos.

+0

No tengo ni idea de lo que es el tamaño, podría ser de cualquier tamaño realmente ... gracias por la respuesta de todos modos .. – BigBug

+1

Esta es en realidad la mejor solución sin usar otras bibliotecas. Desde la API: "Si la' primera lectura 'en la secuencia subyacente devuelve -1 para indicar el final del archivo, este método 'devuelve -1'. De lo contrario, este método devuelve la cantidad de caracteres realmente leídos." Así es como lo usa: http://pastebin.com/RvGwKLuC – bezmax

+0

Para explicar un poco más: BufferedReader se ajusta a otro lector. Cuando llamas 'leer (char [], int, int)' llena su buffer con llamadas secuenciales a 'read(): int' del lector subyacente. Cuando se llena el búfer interno, obtiene una parte y se inserta en el conjunto dado. Entonces, la API dice que si FIRST de esas llamadas de lectura subyacentes devolvió '-1' - entonces este método también devuelve' -1', ya que ES el final de la transmisión. De lo contrario (por ejemplo, si una llamada de lectura tuvo éxito, y la segunda devolvió '-1') - aún devolverá el número de caracteres que se leyeron. – bezmax

5

utilizando los métodos y StringBuilderread(char[], int, int) se vería así, y es probablemente la manera más óptima para hacerlo en Java:

final MAX_BUFFER_SIZE = 256; //Maximal size of the buffer 

//StringBuilder is much better in performance when building Strings than using a simple String concatination 
StringBuilder result = new StringBuilder(); 
//A new char buffer to store partial data 
char[] buffer = new char[MAX_BUFFER_SIZE]; 
//Variable holding number of characters that were read in one iteration 
int readChars; 
//Read maximal amount of characters avialable in the stream to our buffer, and if bytes read were >0 - append the result to StringBuilder. 
while ((readChars = stream.read(buffer, 0, MAX_BUFFER_SIZE)) > 0) { 
    result.append(buffer, 0, readChars); 
} 
//Convert StringBuilder to String 
return result.toString(); 
Cuestiones relacionadas