2017-10-12 9 views
-4

ファイルを開いて、ループで書き込んで(前の行にすべてを追加して)ファイルを閉じたいとします。私はすでにループ内のすべてのメソッドを単一の方法で実装していましたが、私はthis questionに似た問題がありました。ですから、私は、書き込みと開くが別々のステップで行われなければならないという提案に従って実装しようとしています。私のコードは次のようなものです:ループ内のファイルに書き込むことができません

PrintWriter out= createAndOpenFile(fileName); 

    for (int i = 0 ; i< test.size(); i++){ 
      writeToFile(mystring, out); 
     } 
    out.close(); 

そして、上記の方法の実装には、次のようなものです:

private PrintWriter createAndOpenFile(String fileName) { 

     try (FileWriter fw = new FileWriter(fileName); 
      BufferedWriter bw = new BufferedWriter(fw); 
      PrintWriter out = new PrintWriter(bw)) { 
      return out; 

     } catch (IOException e) { 

      e.printStackTrace(); 
      return null; 
     } 

    } 

private void writeToFile(String features, PrintWriter out) { 
     out.println(features); 
     out.flush(); 
    } 

誰もが私のコードが間違っているものを私に言うことはできますか?

更新:「作業していない」とは、作成されたファイルが最後に空であることを意味します。

+3

そして、 『動かない』何を意味? – AKSW

+0

作成されたファイルは最後に空です。 – user1419243

+2

Hm、ok。しかし、あなたは 'createAndOpenFile'で自動クロージャを使用していることを知っていますか? – AKSW

答えて

1

@khelwoodによると、outはreturn文で閉じられています。それは予想通りだ。

あなたはtry、それが動作する(ファイルが空ではありません)内writeToFile年代を行う場合は、次の

try (FileWriter fw = new FileWriter("c:/temp/tt.txt"); 
      BufferedWriter bw = new BufferedWriter(fw); 
      PrintWriter out = new PrintWriter(bw)) { 
     writeToFile(mystring, out); 
     out.close(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
関連する問題