【发布时间】:2021-09-16 09:45:58
【问题描述】:
我正在解决这个 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文件中的新数据
【问题讨论】:
-
你为什么要为此创建一个单独的输入流?使用
available()不是正确的方法,因为它的返回值不能保证是长度。最好使用RandomAccessFile.length()。 -
@MarkRotteveel 谢谢你的建议,其实我是java新手,所以不太了解
-
' 我正在使用
RandomAccessFile.seek((inputStream.available()+1));将指针指向现有数据前 1 个空格':不,你不是。您正在使用它来将指针 1 指向可在没有阻塞的情况下读取的字节数之前的空间。您正在做的是记录在案的available()滥用。它不返回流中剩余的字节数。请参阅 Javadoc。
标签: java file-handling java-io seek randomaccessfile