Supose у вас есть следующий метод:добавляющих объектов в двоичный файл
public static void writeToBinary(Object obj, String filename)
{
ObjectOutputStream oos = null;
try {
oos = new ObjectOutputStream(new FileOutputStream(filename));
oos.writeObject(obj);
} catch (Exception e) {
e.printStackTrace();
} finally{
try{
if (oos != null) oos.close();
}catch (Exception e){
e.printStackTrace();
}
}
}
Как вы можете видеть, метод записывает объект в двоичный файл.
Но теперь вы хотите переписать тот же метод, чтобы добавить объекты в один и тот же файл.
Хорошо, вы посмотрите документацию Java, и вы видите, что вы должны добавить параметр со значением истинного в FileOutputStream:
oos = new ObjectOutputStream(new FileOutputStream(filename, true));
Вы скомпилировать, но, возгласы !, кажется, что он продолжает переопределяя файл.
Ну, проблемы начинаются. После поиска в google вы читаете, что вы должны использовать ObjectOutputStream SAME, чтобы добавить объекты в один и тот же файл. Вы хотите иметь функцию, которая каждый раз, когда вы ее вызываете, добавляет объект. То есть :
writeToBinary("a", filename);
writeToBinary("b", filename);
Но, как я уже говорил, вы должны использовать один и тот же ObjectOutputStream.
Решение 1:
ObjectOutputStream out = getOutputStream (filename);
writeToBinary("a", out);
writeToBinary("b", out);
writeToBinary("c", out);
out.close();
Это очень некрасиво, потому что я хочу, чтобы скрыть использование потоков.
Есть ли другое решение?
EDIT: метод является статическим. Он находится внутри класса утилиты, где все методы являются статическими.
EDIT2: SOLVED! Appending to an ObjectOutputStream. См. Принятый ответ на мой вопрос. Спасибо.
Метод письма является статическим. Он находится внутри класса утилиты, где все методы являются статическими. –
просто используйте экземпляр класса вместо статических методов. Static здесь не так, потому что это транзакционная ситуация. –