Файл Write – PrintStream append

Я пытаюсь добавить некоторую информацию в текстовый файл, но в файле отображается только последний элемент.

Есть много Engineer , но он печатает в файл только последний элемент, который читается.

Например:

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

Я не вижу, где вы закрываете файл. Я тоже не вижу, чтобы ты что-то читал.

Я предполагаю, что вы хотите добавить к файлу, а не переписывать его каждый раз. В этом случае вам нужно использовать параметр 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'); } } } 
  • Как вы убиваете Thread в Java?
  • jackson - Как обрабатывать (десериализовать) вложенный JSON?
  • Включая банки в classpath в командной строке (javac или apt)
  • Каков наилучший способ извлечения первого слова из строки в Java?
  • Легкий способ удаления акцентов из строки Unicode?
  • Java: объект для байта и байт для конвертера объектов (для Tokyo Cabinet)
  • Запуск java с переменной JAVA_OPTS env
  • Как выполнить повторный запуск неудачных тестов JUnit?
  • Перемещение десятичных знаков в двойной
  • Java String array: существует ли размер метода?
  • Форматирование Log4j: возможно ли обрезать стопку стеков?
  • Interesting Posts

    Исключение из памяти из-за большого размера растрового изображения

    Быстрое создание объектов вместо Activator.CreateInstance (type)

    Mac OS X эквивалент команды «дерево» Ubuntu

    Как я могу накапливать ячейки разной длины в матрицу в MATLAB?

    Как включить cookies в веб-браузере Android?

    Двойной щелчок JAR-файла не открывает командную строку

    SVCHost использует 100% процессор в Windows 7

    backtransform `scale ()` для построения графика

    Получение «Несоответствующий модуль анонимного определения () …», когда я пытаюсь выполнить тесты

    положение: фиксировано, если не указано левое / верхнее / правое / нижнее – желаемые результаты в FF / IE, но не в Safari

    Как получить текущее разрешение монитора или имя монитора (LVDS, VGA1 и т. Д.)

    Как настроить размер содержимого UIScrollView динамически

    В редакторе строк ZSH, как вставить новую строку?

    Как изменить тип данных вложенного поля в документе Mongo?

    Селектор CSS для отмеченной метки переключателя

    Давайте будем гением компьютера.