簡體   English   中英

為什么bufferedwriter沒有寫入文件?

[英]why is bufferedwriter not writing in the file?

這是代碼片段。

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中創建了一個目錄,但我沒有刷新它以查看內容。 愚蠢......反正。謝謝你們

有幾件事:

  1. 您每次通過循環創建一個新的FileWriter,每次都會截斷該文件。
  2. BufferedWriter是緩沖的,你永遠不會刷新緩沖區。 您需要調用bw.flush(),或者甚至更好,在完成后關閉編寫器。
  • 您正在循環中創建FileWritter,因此您將始終在每個循環中截斷文件。
  • 你忘了關閉/沖洗寫信
  • 但運氣好(終止程序可能導致寫入程序刷新)文件將包含輸入文件的最后一個單詞,我只能猜測它是一個新行,當你打開文件檢查內容時你可能錯過了。

你的內循環應該是這樣的:

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

理想情況下,您應該使用以下構造函數來創建FileWriter

bw = new BufferedWriter(new FileWriter("files/file.txt",true));

第二個參數, true表示附加新數據。 FileWriter不會截斷您之前的寫入。

並且您的讀者將能夠閱讀適當的數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM