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

1bqhqjot  于 2021-08-25  发布在  Java
关注(0)|答案(1)|浏览(418)

我正在处理这个java问题,在这个问题上,我必须在不修改文件上现有的文本数据的情况下写入系统上的文本文件,我正在使用 randomAceessFile.seek((inputStream.available()+1)); 要将指针指向现有数据前面的1个空格,则使用 randomAceessFile.write((newData.trim()).getBytes()); 要写入该文件,现在的问题是,在该操作之后,文件数据应该在现有数据和添加的新数据之间留有空间,但下面的代码只向文件和新数据添加了新数据 \00 而不是数据之间的空格。

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());
        }
    }
}

该程序给出的输出为
现有数据\00文件中的新数据

vojdkbi0

vojdkbi01#

零字节是因为您寻求的是现有长度加上一。现有字节的编号为0,长度为-1,因此您希望精确搜索现有长度。
也就是说,在偏移量“existing length”处没有专门写入文件的内容,因此得到的是零字节。
没有人会神奇地插入以前没有的空格(0x20字节)。你需要这样做。这很简单: newData = " new data on file" (并且省略你所写内容的修饰)。
也许你之前读到的是在“位置”的意义上使用“空间”这个词?

相关问题