Запись файла - PrintStream append
54827 просмотра
2 ответа
Я пытаюсь добавить некоторую информацию в текстовый файл, но файл показывает только последний записанный элемент.
Есть много Engineer
s, но он выводит в файл только последний прочитанный элемент.
Например:
Engineer e = new Engineer(firstName,surName,weeklySal);
PrintStream writetoEngineer = new PrintStream(new File ("Engineer.txt"));
//This is not append. Only print. Overwrites the file on each item.
writetoEngineer.append(e.toString() + " " + e.calculateMontly(weeklySal));
Автор: snnlankrdsm
Источник
Размещён: 12.11.2019 09:36
Ответы (2)
41 плюса
Я не вижу, где вы закрываете файл. Я тоже не вижу, чтобы ты что-то читал.
Я предполагаю, что вы хотите добавить файл вместо того, чтобы перезаписывать его каждый раз. В этом случае вам нужно использовать опцию добавления FileOutputStream, так как это не стандартное поведение.
PrintStream writetoEngineer = new PrintStream(
new FileOutputStream("Engineer.txt", true));
Кстати: e.toString() + " "
это почти то же самое, что e + " "
за исключением того, что оно не выдает исключение, если e равно нулю.
3 плюса
Поскольку данный фрагмент кода не является самостоятельным компилируемым примером (хотя это и простой), я могу только догадываться, что PrintStream создается внутри цикла для каждой итерации коллекции Engineer. Это приведет к усечению файла, как указано в конструкторе javadoc PrintStream:
Параметры:
file - файл для использования в качестве места назначения этого потока печати. Если файл существует, он будет обрезан до нулевого размера; в противном случае будет создан новый файл. Вывод будет записан в файл и помещен в буфер.
попробуйте этот пример кода:
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.List;
public class PrintEngineers {
public static class Engineer {
private final String firstName;
private final String surName;
private final int weeklySal;
public Engineer(String firstName, String surName, int weeklySal) {
super();
this.firstName = firstName;
this.surName = surName;
this.weeklySal = weeklySal;
}
public int calculateMonthly() {
return weeklySal * 4; // approximately
}
@Override
public String toString() {
return firstName + " " + surName;
}
}
/**
* @param args
* @throws FileNotFoundException
*/
public static void main(String[] args) throws FileNotFoundException {
Engineer e1 = new Engineer("first1", "sur1", 100);
Engineer e2 = new Engineer("first2", "sur2", 200);
Engineer e3 = new Engineer("first3", "sur3", 300);
List<Engineer> engineers = new ArrayList<>(3);
engineers.add(e1);
engineers.add(e2);
engineers.add(e3);
// instanciate PrintStream here, before the loop starts
PrintStream writetoEngineer = new PrintStream(new File("Engineer.txt"));
for (Engineer engineer : engineers) {
// new PrintStream(...) here truncates the file (see javadoc) //This is not append.Only print.Refresh file on each item
writetoEngineer.append(engineer.toString()).append(' ')
.append("" + engineer.calculateMonthly()).append('\n');
}
}
}
Автор: yair
Размещён: 07.11.2011 10:50
Вопросы из категории :
- java В чем разница между int и Integer в Java и C #?
- java Как я могу определить IP моего маршрутизатора / шлюза в Java?
- java Каков наилучший способ проверки XML-файла по сравнению с XSD-файлом?
- java Как округлить результат целочисленного деления?
- java Преобразование списка <Integer> в список <String>
- java Почему я не могу объявить статические методы в интерфейсе?
- file-io Каков наилучший способ прочитать весь файл в std :: string в C ++?
- file-io Получить последние n строк файла с Python, похожего на tail
- file-io Как вы пишете конец файла, открытого с FILE_FLAG_NO_BUFFERING?
- file-io Как создать файл Excel (.XLS и .XLSX) в C # без установки MS Office?
- file-io Как мне создать временный файл с Какао?
- file-io Пакетное переименование файлов в каталоге
- append Разница между методами добавления и добавления в Python
- append Как добавить что-то в массив?
- append Создание элемента div в jQuery
- append Присоединение к ObjectOutputStream
- append Добавить к строковой переменной
- append Дождитесь завершения предыдущего .append ()