Запись из System.out.println в файл - PullRequest
1 голос
/ 23 мая 2011

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

File newfile = new File("/Users/Bill/Desktop/newfile.txt");
    if (newfile.exists()) {
        System.out.println("File exists");
    } else {
        newfile.createNewFile();
        System.out.println("New file created");

    }

И затем я попытался записать в созданный файл результат System.out.println (lines [i]);

    try {
    WriteToFile newFile = new WriteToFile(newfile, true);
    newFile.write(lines[i]); 
    // lines[i] is what I used to print out System.out.println(lines[i])  
    }

    catch (IOException e) {
        System.out.println("Error.");
    }

Хотя я не понимаю, чего ожидаю.Любые предложения?

ПИСЬМО:

public class WriteToFile {
private String path;
private boolean append = false;

public WriteToFile(String filename) {
    path=filename;
}

public WriteToFile(String filename, boolean appendfile){
    path=filename;
    append=appendfile;
}

public void write(String text) throws IOException {
    FileWriter filewrite = new FileWriter(path, append);
    PrintWriter print = new PrintWriter(filewrite);

    print.printf("%s" + "%n", text);
    print.close();
}
}

Ответы [ 3 ]

1 голос
/ 23 мая 2011

Каждый раз, когда вы звоните WriteToFile.write, он снова открывает файл для записи, обрезая исходное содержимое файла. Вы должны открыть файл один раз в конструкторе (и сохранить PrintWriter в поле) и добавить метод close, который вызывает close для PrintWriter.

На вызывающей стороне сделайте следующее:

WriteToFile writer = new WriteToFile(filename);
try {
    // writer.write(...);
} finally {
    writer.close();
}

Имея вызов close в блоке finally, вы гарантируете, что файл будет закрыт, даже если исключение вызывает преждевременное завершение функции.

0 голосов
/ 10 июля 2013

Просто установите fileName в System, используя метод System.setOut (fileName);

Затем, когда мы захотим распечатать с помощью System.out.println (), он будет напрямую распечатан наимя файла, которое вы упоминаете.

0 голосов
/ 23 мая 2011

Посмотрите на второй аргумент конструктора FileWriter в вашем коде.

FileWriter filewrite = new FileWriter(path, append);

Видите, он говорит "добавление".Угадай, что он делает.Прочитайте документацию , если вы не уверены.

Теперь посмотрите, как вы инициализировали append.

private boolean append = false;

Этот код полностью работает, как и ожидалось.Это просто ошибка разработчика.Исправить это:)

...