Можно ли записать в один и тот же файл разными способами? - PullRequest
2 голосов
/ 05 июля 2011

У меня есть следующий метод:

public static void writeContestantsToFile(ArrayList<Contestant> contestants) throws IOException {
    FileOutputStream fos = new FileOutputStream("minos.dat");
    ObjectOutputStream oos = new ObjectOutputStream(fos);

    oos.writeObject(contestants);
    oos.flush();
    oos.close();
}

Но мне интересно, могу ли я снова написать в файл minos.dat с другим arraylist?Например, есть другой метод, подобный этому:

public static void writeContestantsToFile(ArrayList<Times> times) throws IOException {
    FileOutputStream fos = new FileOutputStream("minos.dat");
    ObjectOutputStream oos = new ObjectOutputStream(fos);

    oos.writeObject(times);
    oos.flush();
    oos.close();
}

Смогу ли я получить как архива, так и участников?Или мне нужно писать в отдельные файлы?

Ответы [ 3 ]

2 голосов
/ 05 июля 2011

Можно, но если вы не хотите перезаписывать содержимое файла, а только добавлять, откройте его так:

FileOutputStream fos = new FileOutputStream("minos.dat", true);

(используя этот конструктор )

1 голос
/ 05 июля 2011

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

0 голосов
/ 11 сентября 2016

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

  • оставить файл открытым
  • синхронизировать доступ к нему
  • использовать то же ObjectOutputStream для жизни процесса
  • и убедитесь, что он закрыт при выходе.
...