0

while(matcher.find()) ループを使用して、特定の部分文字列をファイルに書き込みます。System.out コンソールのファイルで一致した文字列のリストを取得できますが、FileWriter を使用してテキスト ファイルに書き込もうとすると、ループ内の最後の文字列しか書き込まれません。私は同様の問題についてstackoverflowを精査しました(そしてそれはその名前にふさわしいものです)、私を助けるものは何も見つかりませんでした。明確にするために、これは EDT で実行されていません。問題を探す場所を誰かが説明できますか?

try {
    String writeThis = inputId1 + count + inputId2 + link + inputId3;
    newerFile = new FileWriter(writePath);
    //this is only writing the last line from the while(matched.find()) loop
    newerFile.write(writeThis);
    newerFile.close();
    //it prints to console just fine!  Why won't it print to a file?
    System.out.println(count + " " + show + " " + link); 
    } catch (IOException e) {
        Logger.getLogger(Frame1.class.getName()).log(Level.SEVERE, null, e);
    } finally {
        try {
            newerFile.close();
            } catch (IOException e) {
                Logger.getLogger(Frame1.class.getName()).log(Level.SEVERE, null, e);

            }
    }
}
4

3 に答える 3

3

クイックフィックス:

変化する

newerFile = new FileWriter(writePath);

newerFile = new FileWriter(writePath, true);

これはFileWriter(String fileName, boolean append)コンストラクタを使用します。


より良い修正:

ループのFileWriter外側を作成し、後で閉じます (または初期化として使用します)。while(matcher.find())try with resources

コードは次のようになります。

try (FileWriter newerFile = new FileWriter(writePath)) {
   while (matcher.find()) {
      newerFile.write(matcher.group());
   }
} ...
于 2013-07-04T09:09:59.363 に答える
0

FileWriterすべてのループ反復のインスタンスを作成しないでください。そこにメソッドの使用を残し、ループの前write()に初期FileWriter化し、ループの後に閉じる必要があります。

于 2013-07-04T09:12:20.950 に答える
0
Please check as follows:

FileWriter newerFile = new FileWriter(writePath);
while(matcher.find())
{
xxxxx
try {
    String writeThis = inputId1 + count + inputId2 + link + inputId3;

    //this is only writing the last line from the while(matched.find()) loop
    newerFile.write(writeThis);
    newerFile.flush();
    //it prints to console just fine!  Why won't it print to a file?
    System.out.println(count + " " + show + " " + link); 
    } catch (IOException e) {
        Logger.getLogger(Frame1.class.getName()).log(Level.SEVERE, null, e);
    } finally {
        try {
            newerFile.close();
            } catch (IOException e) {
                Logger.getLogger(Frame1.class.getName()).log(Level.SEVERE, null, e);

            }
    }
}
}
于 2013-07-04T09:39:45.517 に答える