2011-02-05 9 views

risposta

7

Scanner:

for(Scanner sc = new Scanner(new File("my.file")); sc.hasNext();) { 
    String line = sc.nextLine(); 
    ... // do something with line 
} 
+1

Adoro l'ampia varietà di metodi offerti da 'Scanner'. Grazie. Semplice e pulito. –

7

Dai un'occhiata alla classe Scanner.

È stato aggiunto in Java 5 per semplificare la lettura di stringhe e file rispetto alle vecchie catene FileReader e FileInputStream (non più new BufferedReader(new FileReader()) solo per ottenere un metodo readLine).

Nella classe Scanner, è possibile utilizzare il metodo nextLine per leggere una riga alla volta, ma ha anche molti metodi utili per trovare le primitive e le espressioni regolari nel file.

+1

esempio di codice: http://www.kodejava.org/examples/241.html – Maxym

+0

Lo scanner sembra davvero l'opzione corretta.Grazie. –

+0

@Maxym: questa risposta doveva essere accompagnata da un esempio di utilizzo. Grazie. –

4

È possibile utilizzare BufferedReader, qualcosa di simile: -

try { 
    BufferedReader input = new BufferedReader(new FileReader(new File("c:\\test.txt"))); 
    try { 
     String line = null; 
     while ((line = input.readLine()) != null) { 
      System.out.println(line); 
     } 
    } finally { 
     input.close(); 
    } 
} catch (IOException ex) { 
    ex.printStackTrace(); 
} 
+1

Lo scanner sembra essere più semplice e ha più opzioni. Ma grazie per aver messo qui il codice necessario. +1 –

+0

solo "tra l'altro", quando arriverà Java7, avrà "gestione automatica delle risorse" e ciò significa che non avremo bisogno di 'try {...} finally {out.close()}' - la chiusura sarà essere fatto da JVM, e si prenderà cura di esso. – Maxym

2

Se siete disposti a fare uso di 3rd party libraries, poi le classi di utilità come ad esempio Files da Guava o FileUtils da Apache Commons IO rendere la lettura dei file molto semplice.

Esempi di seguito (dove File file = new File("path/to/file.txt")) di lettura di tutte le righe di un file di testo in un elenco e lettura dell'intero file in una stringa.

Guava:

List<String> lines = Files.readLines(file, Charsets.UTF_8); 

String contents = Files.toString(file, Charsets.UTF_8); 

Apache Commons IO:

List<String> lines = FileUtils.readLines(file, "UTF-8"); 

String contents = FileUtils.readFileToString(file, "UTF-8") 

mia raccomandazione (a partire dal 2013) è Guava, che è un moderno pulito biblioteca,, mantenuto attivamente. In genere è di qualità superiore rispetto a quello di Apache Commons.

Naturalmente, aggiungere Guava solo per questo non avrebbe senso, in quanto è una biblioteca relativamente grande. D'altra parte, non utilizzando Guava in un progetto Java oggi IMO sarebbe sciocco. :-)

Certo, JDK ora fornisce strumenti abbastanza adeguati (Scanner) per questo particolare scopo; usare una lib di terze parti per leggere i file era più giustificato quando l'alternativa era something like this.

+0

Stavo cercando di non usare le librerie di terze parti, davvero. Ma, avevo sentito parlare di quella libreria prima. Sembra che stia guadagnando accettazione. –

+0

@ John. Heh, "ottenere l'accettazione" potrebbe essere un modo per dirlo. La mia esperienza è che le librerie di Apache Commons sono state un pilastro nei tipici progetti Java fin dai primi anni del 00 (più recentemente aggiunti/sostituiti dalle librerie di Google, come Guava). Naturalmente, si dovrebbe considerare attentamente prima di aggiungere dipendenze, ma cose come le Commons IO spesso tirano facilmente il peso. – Jonik

0

È inoltre possibile utilizzare InputStreamReader (che si crea utilizzando un InputStream come FileInputStream) racchiuso in un BufferedReader per una semplice lettura di riga del file.

1

Si potrebbe provare FileUtils di apache. metodi come

for(String line: FileUtils.readLines(file)) { 
    System.out.println(line); 
} 
Problemi correlati