2

我有需要记录序列化对象的文件。我打开ObjectOutputStream写入文件。如果我没有在文件中写入任何内容,则文件内容将被删除。我不希望在制作时删除内容ObjectOutputStream

我的代码(我使用 Guice),

@Provides
@ArticleSerializationOutputStream
public ObjectOutputStream getArticleObjectOutputStream(Config config) {
  ObjectOutputStream out = null;
  String fileName = config.getConfigValue(ARTICLE_SNAPSHOT);
  try {
    out = new ObjectOutputStream(new FileOutputStream(new File(fileName)));
  } catch (IOException e) {
    String errorMessage = String.format(IO_EXCEPTION_PROBLEM, fileName);
    addError(errorMessage);
  }
  return out;
}
4

2 回答 2

13

创建ObjectOutputStream本身不会覆盖任何内容。我怀疑您刚刚创建了一个新FileOutputStream内容,它将截断任何当前内容,除非您告诉它追加。我想你想要:

FileOutputStream fos = new FileOutputStream(filename, true);

使其附加到文件而不是覆盖。

编辑:是的,根据您的编辑,您正在创建一个新的FileOutputStream而不告诉它附加。因此它会覆盖文件。

于 2009-07-03T07:48:11.073 回答
0

我解决问题。我使用提供程序而不是从 Guice 开始实例化 OutputStrams。

@Inject @ArticleOutputStream
Provider<OutputStream> articleObjectOutputStream;

articleOutputStream.get();

现在工作正常。

于 2009-07-05T14:13:37.193 回答