将数据写入文件正在删除之前的所有内容(放置00)并更改文件大小

时间:2013-05-21 05:10:15

标签: java bytebuffer fileoutputstream corrupt filechannel

我有一个写出一些数据的程序 - 我正在使用这个逻辑

FileOutputStream outpre = new FileOutputStream(getfile());
FileChannel ch = outpre.getChannel();
ch.position(startwr);
ch.write(ByteBuffer.wrap(dsave));
outpre.close();

它将正确的数据写出到正确的位置,唯一的问题是在写入的起始位置(startwr)之前的所有内容都被替换为00,并且文件也被更改为写入完成的点,文件的结尾。

如何在不破坏以前数据和更改文件大小的情况下将数据写入文件?

2 个答案:

答案 0 :(得分:2)

您需要指示流附加或覆盖文件的内容......

请查看FileOutpuStream(File, boolean)了解详情

<强>更新

经过一番捣乱,我发现我能接近工作的唯一解决方案是......

RandomAccessFile raf = null;

try {
    raf = new RandomAccessFile(new File("C:/Test.txt"), "rw");
    raf.seek(3);
    raf.writeBytes("BB");
} catch (IOException exp) {
    exp.printStackTrace();
} finally {
    try {
        raf.close();
    } catch (Exception e) {
    }
}

答案 1 :(得分:0)

你可以这样修理

FileChannel fc = FileChannel.open(getFile().toPath(), StandardOpenOption.APPEND);