Файл Write – PrintStream append
Я пытаюсь добавить некоторую информацию в текстовый файл, но в файле отображается только последний элемент.
Есть много Engineer
, но он печатает в файл только последний элемент, который читается.
Например:
- Запрос HTTP-клиента Java с заданным таймаутом
- Увеличить размер кучи в Java
- Конфликтная версия библиотеки в проекте java maven
- .deb для Ubuntu: правильная зависимость Java
- Что означает этот stream, соединяющий код?
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));
- Сравнение строки с пустой строкой (Java)
- Как получить доступ к вложенным элементам объекта json с помощью метода getJSONArray
- Что такое символ обратной косой черты (\\)?
- Eclipse Google Plug-In не запускает сервер для веб-приложения
- «PKIX path building failed failed» и «не удалось найти допустимый путь сертификации для запрошенной цели»
- Существует ли в Java обычная библиотека рациональных чисел?
- Mockito: проверка с помощью общих параметров
- Как я могу заполнить ListView в JavaFX с помощью пользовательских объектов?
Я не вижу, где вы закрываете файл. Я тоже не вижу, чтобы ты что-то читал.
Я предполагаю, что вы хотите добавить к файлу, а не переписывать его каждый раз. В этом случае вам нужно использовать параметр append FileOutputStream, поскольку это не поведение по умолчанию.
PrintStream writetoEngineer = new PrintStream( new FileOutputStream("Engineer.txt", true));
BTW: e.toString() + " "
почти то же самое, что и e + " "
за исключением того, что оно не генерирует исключение, если e равно null.
Поскольку код, данный fragment кода, не является самосогласованным скомпилированным примером (это просто, хотя), я могу просто предположить, что PrintStream создается внутри цикла, за каждую итерацию по коллекции Engineer. Это приведет к тому, что файл будет усечен как указано в конструкторе PrintStream javadoc:
Параметры:
file – Файл для использования в качестве адресата этого streamа печати. Если файл существует, то он будет усечен до нулевого размера; в противном случае будет создан новый файл. Выход будет записан в файл и буферизирован.
попробуйте этот примерный код:
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 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'); } } }