2

我需要在特定索引位置写入文件。BufferedWriter并且PrintWriter不允许写入索引。我该如何实现这一目标?

基本上我想要做的是如果一个文件在 EOF 包含一个空行,那么我需要在那个位置写入,否则插入一个新行并写入。将文件的内容复制到临时文件,然后删除原始文件,然后再次将临时文件重命名为原始文件的名称不是一种选择。

谢谢

4

2 回答 2

5

您需要使用RandomAccessFile.

使用此类,您可以使用该方法转到特定位置seek(long)并使用不同的方法进行编写write

对于您的特殊问题,最好的解决方案似乎是使用 aRandomAccessFile并导航到文件末尾。检查这是否是新行,写入,关闭。

于 2011-08-12T08:44:57.703 回答
0

给定的是在特定位置写入内容的方法。

假设我的文件是Test.txt,内容如下

Hello 
How are you
Today is Monday

现在你想在你好之后写“”。所以“ 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
于 2016-03-31T11:52:51.070 回答