Java 使用DataOutput/InputStream管理文件字节

Java 使用DataOutput/InputStream管理文件字节,java,datainputstream,dataoutputstream,Java,Datainputstream,Dataoutputstream,我有一个程序,将通过创建多个不同的类实例。我想使用DataOutputStream将每个实例的详细信息写入一个文件(这是一个必要的练习,稍后我将研究其他方法),但问题是我注意到每次创建和写入新实例时,DataOutputStream都会覆盖该文件。我的第一个想法是每次编写新实例时,首先使用DataInputStream获取文件中的内容,保存它,然后用新实例重写它。这似乎很快就会让人困惑。对于这样的事情,最好的做法是什么?提前谢谢 编辑:我将尝试更具体地说明我在这里要做什么。 当我获取要写入文件的

我有一个程序,将通过创建多个不同的类实例。我想使用DataOutputStream将每个实例的详细信息写入一个文件(这是一个必要的练习,稍后我将研究其他方法),但问题是我注意到每次创建和写入新实例时,DataOutputStream都会覆盖该文件。我的第一个想法是每次编写新实例时,首先使用DataInputStream获取文件中的内容,保存它,然后用新实例重写它。这似乎很快就会让人困惑。对于这样的事情,最好的做法是什么?提前谢谢

编辑:我将尝试更具体地说明我在这里要做什么。 当我获取要写入文件的类时,首先我将使用dataInputStream.readFully获取文件中的所有内容。我的理解是,它获取文件中的所有字节并将它们存储在一个数组中。我想将其与类实例进行比较,如果实例与文件中已有的内容相匹配,则不要将此特定实例(因为它已经存在)输出到文件中。否则,请附加到文件。

打开文件进行写入时,请使用构造函数。例如:

File f = new File("C:\data.txt");
FileOutputStream fos = new FileOutputStream(f, true); // open file for appending
DataOutputStream dos = new DataOutputStream(fos);
// anything written to dos after this point will be appended

如果您只需要序列化对象,我强烈建议您使用JAXB或其他序列化/封送API,而不是重新发明轮子。您可能会节省大量时间。

我假设这不会检查重复项(只是不断增加文件)?我需要写一些东西来消除重复。这纯粹是附加到现有文件的末尾。如果您还有其他想法,我建议您编辑问题或提出新问题,包括对预期或期望的行为进行更详细的解释(伪代码或代码也会有所帮助)。但是,您可能还想研究JAXB或JavaBeans序列化或其他类似的API,因为它们已经解决了您试图解决的根本问题(将数据序列化到磁盘)。我将完全使用序列化,但这是我正在尝试完成的一个特定练习。我编辑了这个问题,试图更好地解释。谢谢