почему bufferedwriter не пишет в файл? - PullRequest
4 голосов
/ 13 декабря 2010

Вот фрагмент кода.

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

Edit: Я читаю файлы из каталога. Итак, мне нужно открывать ридер в каждом цикле. Я сделал некоторую модификацию, но тогда она также не записывается в этот файл. Вот код:

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, и я не обновил его, чтобы увидеть содержимое. Это глупо ... в любом случае. Большое спасибо

Ответы [ 3 ]

15 голосов
/ 13 декабря 2010

Пара вещей:

  1. Вы создаете новый FileWriter каждый раз через цикл, который будет обрезать файл каждый раз.
  2. BufferedWriter буферизуется, и выникогда не очищаешь буферВам нужно либо вызвать bw.flush (), либо, что еще лучше, закрыть писатель, когда закончите.
13 голосов
/ 13 декабря 2010
  • Вы создаете FileWritter внутри цикла, поэтому вы всегда будете обрезать файл в каждом цикле.
  • Вы забыли закрыть / очистить писатель
  • Но с некоторой удачей (завершение программы может вызвать сбрасывание программы записи), файл будет содержать последнее слово вашего входного файла, которое, я могу только предположить, будет новой строкой, и вы, вероятно, пропустили, когда открывали файл проверьте содержание.

Ваш внутренний цикл должен выглядеть примерно так:

try (BufferedWriter bw = new BufferedWriter(new FileWriter("file.txt"))) {
    while (st.hasMoreTokens()) {
        bw.write(st.nextToken());
        bw.newLine();
    }
}
0 голосов
/ 04 мая 2014

В идеале вы должны использовать следующий конструктор для создания FileWriter,

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

Второй параметр, true - для добавления новых данных. FileWriter не будет усекать вашу предыдущую запись.

и ваш читатель сможет прочитать правильные данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...