2012-03-23 3 views
0

Hallo Ich habe den Buffered Reader verwendet, um zu versuchen, eine Textdatei zu lesen und zu drucken, wie viele Zeilen die Textdatei hat. Mein Code geht so ...Lesen einer Datei in Java-Fehler

File parent = new File("/Desktop/Test Folder"); 
File text = new File(parent, "/text.txt"); 
FileWriter fw; 
FileReader fr; 
BufferedWriter write; 
BufferedReader read; 
if (!parent.exists()) { 
     parent.mkdir(); 
    } 
    try { 
     text.createNewFile(); 
    } catch (Exception ex) { 
     System.err.println("Error creating file"); 
    } 
    try { 
     fw = new FileWriter(text); 
     fr = new FileReader(text); 
     write = new BufferedWriter(fw); 
     read = new BufferedReader(fr); 
    } catch (Exception ex) { 
     System.err.println("Error trying to write or read file"); 
    } 
    System.out.println("Writing to file..."); 
try { 
     write.write("String number one.\n"); 
     write.write("String number two.\n"); 
     List<String> lines = new LinkedList<String>(); 
     String line = read.readLine(); 
     while (line != null) { 
      lines.add(line); 
      line = read.readLine(); 
     } 
     System.out.printf("Number of lines is %d.\n", lines.size()); 
     write.flush(); 
     write.close(); 
    } catch (Exception ex) { 
     System.err.println("Error writing to file"); 
    } 

Wenn ich dies ausführe sagt es, dass es 0 Elemente in List-Zeilen gibt. Irgendeine Hilfe? Habe ich irgendwo einen Fehler gemacht oder verwende ich die falsche Methode? Ich bin ein Amateur, also vermute ich, dass der Fehler offensichtlich ist. Wie auch immer, kann mir jemand Hilfe geben?

+0

Sie müssen die Ausgabe spülen(), bevor Sie sie aus der Datei lesen können. –

Antwort

1

Haben Sie versucht, den writer.flush(); Anruf vor dem readLine() einen zu verschieben?

Vom documentation von Writer.flush():

Flush der Strom. Wenn der Stream Zeichen aus den verschiedenen write() - Methoden in einem Puffer gespeichert hat, schreiben Sie diese sofort an das gewünschte Ziel.

Wenn Sie also vor dem Löschen lesen, ist die Datei möglicherweise leer!

+0

Danke das war das Problem –

0

sollten Sie die flush() und schließen() des Writer vor dem eigentlichen Lesen. Was Sie versuchen, ist die Datei als eine Pipe zu verwenden. Das ist nicht das, was du tun willst, denke ich.

+0

close() ruft flush() ... also nur close() benötigt. http://docs.oracle.com/javase/6/docs/api/java/io/OutputStreamWriter.html#close() – Adam