2012-03-24 4 views
5

C'è un modo per posizionare un BufferedReader in una stringa in un colpo, piuttosto che riga per riga? Ecco quello che ho finora:Come si inserisce il contenuto di un BufferedReader in una stringa?

  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); 

risposta

1

Se si conosce la lunghezza del tuo ingresso (o un limite superiore ad esso) si può leggere il tutto a un array di caratteri, usando read(char[],int,int), quindi utilizzare tale per costruire una stringa. Non importa se il tuo terzo parametro (len) è maggiore della dimensione, il metodo restituirà il numero di caratteri letti.

+0

Non ho idea di quale sia la dimensione, potrebbe essere qualsiasi dimensione davvero .. grazie per la risposta comunque .. – BigBug

+1

Questa è in realtà la soluzione migliore senza utilizzare altre librerie. Dall'API: "Se il' first read' sul flusso sottostante restituisce -1 per indicare la fine del file, questo metodo 'restituisce -1', altrimenti questo metodo restituisce il numero di caratteri effettivamente letti." Ecco come lo usi: http://pastebin.com/RvGwKLuC – bezmax

+0

Per spiegarti meglio: BufferedReader si avvolge attorno ad altri lettori. Quando chiamate 'read (char [], int, int)' riempie il suo buffer con chiamate sequenziali a 'read(): int' del lettore sottostante. Quando il buffer interno viene riempito, ne ottiene una parte e si inserisce nell'array specificato. Quindi, l'API dice che se PRIMA di quelle sottostanti chiamate di lettura restituite '-1' - allora questo metodo restituisce anche' -1', poiché è la fine dello stream. Altrimenti (per esempio, se 1 ha letto la chiamata ha avuto successo e la seconda ha restituito '-1') - restituirà comunque il numero di caratteri letti. – bezmax

5

utilizzando le StringBuilder e read(char[], int, int) metodi sarebbero simile a questo, ed è probabilmente il modo più ottimale per farlo in 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(); 
Problemi correlati