seek() 方法不适用于 java 中的 InputStream available() 方法

seek() method not working with InputStream available() method in java

我正在解决这个 java 问题,我必须写入系统上的文本文件而不调整该文件上的现有文本数据,我正在使用 randomAceessFile.seek((inputStream.available()+1)); 指向我的指针1 space 领先于现有数据,然后我使用 randomAceessFile.write((newData.trim()).getBytes()); 写入该文件,现在的问题是在此操作之后文件数据应该在现有数据和新数据之间有 space已添加,但下面的代码仅将新数据添加到文件和 [=14=] 而不是 spaces 中间数据。

import java.io.RandomAccessFile;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
public class Random{
    public static void main(String[] args) {
        try {
            File file = new File("data.txt");
            InputStream inputStream = new FileInputStream(file);
            RandomAccessFile randomAceessFile = new RandomAccessFile(file, "rw");
            randomAceessFile.seek((inputStream.available()+1));
            String newData = "new data on file";
            randomAceessFile.write((newData.trim()).getBytes());
            randomAceessFile.close();
            inputStream.close();
        } catch (Exception e) {
            System.err.println(e.getCause());
            System.out.println(e.getStackTrace());
            System.out.println(e.getMessage());
        }
    }
}

这个程序给出的输出是

existing data [=15=]new data on file

零字节是因为你寻求现有长度加一。现有字节编号为 0 到 length-1,因此您要精确查找现有长度。

也就是说,没有任何内容专门写入偏移 'existing length' 处的文件,因此您得到一个零字节。

没有人会神奇地插入以前不存在的 space(0x20 字节)。你需要这样做。这很简单:newData = " new data on file"(并省略对您所写内容的 trim 调用)。

也许您之前阅读的是在 'position' 的意义上使用 'space' 一词?