Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将数据写入文件就是擦除之前的所有内容(放置00';s)并更改文件大小_Java_Bytebuffer_Fileoutputstream_Corrupt_Filechannel - Fatal编程技术网

Java 将数据写入文件就是擦除之前的所有内容(放置00';s)并更改文件大小

Java 将数据写入文件就是擦除之前的所有内容(放置00';s)并更改文件大小,java,bytebuffer,fileoutputstream,corrupt,filechannel,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,并且

我有一个程序,可以写出一些数据,我用的是这个逻辑

FileOutputStream outpre = new FileOutputStream(getfile());
FileChannel ch = outpre.getChannel();
ch.position(startwr);
ch.write(ByteBuffer.wrap(dsave));
outpre.close();
它将正确的数据写入正确的位置,唯一的问题是,在开始写入位置(startwr)之前的所有内容都被替换为00,并且文件也会发生更改,使写入完成的点即文件的结尾


如何将数据写入文件而不损坏以前的数据并更改文件大小?

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

请查看以了解更多详细信息

已更新

经过一番周旋之后,我发现我能接近工作的唯一解决办法是

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) {
    }
}

你可以这样修理它

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

Java API这样说:“append-如果为true,那么字节将被写入文件的末尾而不是开头”API说“字节将被写入文件的末尾而不是开头”是什么意思我不明白这将如何解决问题,你是说如果我将代码更改为FileOutputStream outpre=newfileoutputstream(getfile(),true);然后bug就会消失?本质上是说,如果
append
true
则数据将写入文件末尾,并将其追加到文件中,否则原始内容将被丢弃,新数据将写入文件中。是的,如果您使用
FileOutputStream(getfile(),true)
您应该会发现您写入文件的任何内容都将附加到文件的末尾。好的,谢谢,到目前为止,这个方法在它使用的RandomAccessFile(文件,字符串)的构造函数中也非常有效(我从来没有想到会使用RandomAccessFile)字符串的重要性是什么?第二个值决定访问模式,通常为“r”表示读取或“rw”表示读取/写入。建议您尝试随机访问文件。我在Java编年史中使用它时没有这个问题。我只是尝试了这个方法,当它附加到文件的末尾时,OP正在尝试写入文件中的特定位置,而我无法用这种方式使用
FileChannel
来实现。我对
FileChannel
没有太多的经验,所以如果你知道一种寻找文件位置并写作的方法,那么请毫不犹豫地填写:P