2012-03-23 14 views
0

こんにちは私は、バッファード・リーダーを使ってテキスト・ファイルを読んで、テキスト・ファイルの行数を表示しようとしています。私のコードは次のようになります...javaエラーのファイルを読む

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

これを実行すると、リスト行に0個の要素があることがわかります。どんな助け?私はどこかで車のない間違いを作ったのですか、間違った方法を使っていますか?私はアマチュアなので、エラーは明らかなものだと思う。とにかく誰かが私に助けを与えることができますか?

+0

出力をファイルから読み取る前に、その出力をフラッシュ()する必要があります。 –

答えて

1

writer.flush();コールをreadLine()の前に移動しようとしましたか? Writer.flush()documentationから

はストリームをフラッシュします。バッファにさまざまなwrite()メソッドの文字が保存されている場合は、すぐに目的の場所に書き込んでください。

したがって、ファイルをフラッシュする前に読んでいる場合は、ファイルが空である可能性があります。

+0

ありがとうございました。これは問題でした –

0

実際の読み取りの前に、Writerのflush()とclose()を置く必要があります。あなたがしようとしているのは、ファイルをパイプとして使用することです。それはあなたがしたいと思っているものではありません。

+0

close()はflush()を呼び出します... close()だけが必要です。 http://docs.oracle.com/javase/6/docs/api/java/io/OutputStreamWriter.html#close() – Adam

関連する問題