我需要写入特定索引位置的文件。 BufferedWriter
和PrintWriter
不允许写入索引。我该如何实现这一目标?
基本上我想做的是如果文件在EOF中包含空行,那么我需要在该位置写入,否则插入新行并写入。将文件的内容复制到临时文件,然后删除原始文件,然后再次将临时文件重命名为原始文件的名称不是一种选择。
由于
答案 0 :(得分:5)
您需要使用RandomAccessFile
。
使用此类,您可以使用seek(long)
方法转到特定位置,并使用不同的write
方法进行编写。
如果您遇到特殊问题,最好的解决方案就是
使用RandomAccessFile
并导航到文件末尾。检查这是否是新行,写,关闭。
答案 1 :(得分:0)
给出了在特定位置写内容的方法。
假设我的文件是 Test.txt ,内容如下
Hello
How are you
Today is Monday
现在你要写" hi "你好之后。所以" hi "的偏移量将是" 5"。
方法是:
filename = "test.txt";
offset = 5;
byte[] content = ("\t hi").getBytes();
private void insert(String filename, long offset, byte[] content) throws IOException {
RandomAccessFile r = new RandomAccessFile(filename, "rw");
RandomAccessFile rtemp = new RandomAccessFile(filename+"Temp", "rw");
long fileSize = r.length();
FileChannel sourceChannel = r.getChannel();
FileChannel targetChannel = rtemp.getChannel();
sourceChannel.transferTo(offset, (fileSize - offset), targetChannel);
sourceChannel.truncate(offset);
r.seek(offset);
r.write(content);
long newOffset = r.getFilePointer();
targetChannel.position(0L);
sourceChannel.transferFrom(targetChannel, newOffset, (fileSize - offset));
sourceChannel.close();
targetChannel.close();
rtemp.close();
r.close();
}
输出将是:
Hello hi
How are you
Today is Monday