1. ホーム
  2. java

[解決済み] bufferedwriterがファイルに書き込まれないのはなぜですか?

2022-02-08 02:01:50

質問内容

以下はコード・スニペットです。

read = new FileReader("trainfiles/"+filenames[i]);
                br = new BufferedReader(read);
                while((lines = br.readLine())!=null){
                    st = new StringTokenizer(lines);
                    while(st.hasMoreTokens()){
                        bw = new BufferedWriter(new FileWriter("files/file.txt"));
                        bw.write(st.nextToken());
                        bw.newLine();
                    }
                }

編集する 私はディレクトリからファイルを読んでいます。そのため、ループごとにリーダーを開く必要があります。私はいくつかの変更を加えましたが、それはまた、そのファイルに書き込まれません。 以下はそのコードです。

for(i=0;i==0;i++){
            if(filenames[i].matches(".*ham.*")){
                System.out.println("ham:"+filenames[i]);
                read = new FileReader("trainfiles/"+filenames[i]);
                br = new BufferedReader(read);
                while((lines = br.readLine())!=null){
                    st = new StringTokenizer(lines);
                    while(st.hasMoreTokens()){
                        System.out.println(st.nextToken());
                       bw.write(st.nextToken());
                    }
                }
                bw.close();
                br.close();

            }else{
                System.out.println("spam:"+filenames[i]);
            }
                        }

を編集します。 コードを修正しましたが、成功しません。

while((lines = br.readLine())!=null){
                    st = new StringTokenizer(lines);
                    bw = new BufferedWriter(new FileWriter("files/file.txt"));
                    while(st.hasMoreTokens()){
                        System.out.println(st.nextToken());
                       bw.write(st.nextToken());
                    }
                    bw.close();
                }

                br.close();

そして、このエラーが発生します。 Exception in thread "main" java.util.NoSuchElementException at java.util.StringTokenizer.nextToken(StringTokenizer.java:332) at Test.main(Test.java:30)

を編集します。 ありがとう、みんな... 私はそれを理解した。実はeclipseでディレクトリを作成したのですが、内容を見るためにリフレッシュしていなかったのです。とにかく、ありがとうございました。

解決方法は?

  • ループ内でFileWritterを作成しているため、各サイクルで必ずファイルが切り捨てられます。
  • ライターをクローズ/フラッシュするのを忘れています。
  • しかし、運が良ければ(プログラムを終了させるとライタがフラッシュすることがあります)、ファイルには入力ファイルの最後の単語が含まれるでしょう。

インナーループはこのようなものであるべきです。

try (BufferedWriter bw = new BufferedWriter(new FileWriter("file.txt"))) {
    while (st.hasMoreTokens()) {
        bw.write(st.nextToken());
        bw.newLine();
    }
}