Нужна помощь в записи в файл - PullRequest
0 голосов
/ 31 октября 2010

У меня есть следующий класс, который пишет в файл, но не работает так, как я хочу.Я вызываю метод write в цикле while, чтобы он записывал строку в новую строку.Он пишет только последнюю строку.Все предыдущие не записаны, кроме последнего.

Вот класс:

import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;

public class Writer {

 private static PrintWriter  outputStream = null;

 public Writer(String algorithmName){
  try {
   outputStream = new PrintWriter(new FileWriter(algorithmName+".txt"));
  } catch (IOException e) {
   e.printStackTrace();
  }
 }
     public  void write(String str){
        try {
                outputStream.append(str);
        }catch(Exception exc){

        } finally {
            if (outputStream != null) {
                outputStream.close();
            }
        }
    }
}

пример кода:

Writer w = new Writer("filename");
for(int = i; i < 10; i++){
w.write(i);
}

В этом случае я получаюрезультаты:

9

вместо

0
1
2
3
...
9

что я делаю не так?

спасибо

Ответы [ 4 ]

1 голос
/ 31 октября 2010

Вы закрываете выходной поток после каждой операции записи. Вы должны назвать это один раз после того, как все написали.

0 голосов
/ 01 ноября 2010

У вас есть несколько ошибок здесь.Вы использовали стандартное имя класса в качестве собственного имени класса;вы закрываете поток после каждой записи, как заметили другие;поток является статическим членом, когда он должен быть элементом экземпляра;и у вас есть пустой блок catch, который не позволяет вам увидеть какие-либо ошибки.Никогда не делай этого.

0 голосов
/ 31 октября 2010

Я буду немного не по теме и порекомендую вам библиотеку Google Guava , поскольку она содержит много полезных повседневных функций.

С его помощью решение вашей проблемы становится почти однострочным с:

for(int i = 0; i < 10; ++i) {
    Files.append(String.valueOf(i) + "\n", new File("filename"), Charsets.UTF_8);
}

Редактировать: вы не должны использовать это в больших циклах, потому что библиотека, вероятно, эффективно открывает и закрывает файл каждый раз. Не эффективно вообще.

0 голосов
/ 31 октября 2010

каждый раз, когда вы пишете, вы закрываете поток, который затем вынуждает создать новый файл, поэтому все, что находится в файле, равно 9.

Writer output = new BufferedWriter(new FileWriter(algorithmName+".txt"));
try {
  for(int = i; i < 10; i++){
      output.write( i );
  }
}
finally {
  output.close();
}
...