Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中替换大文件的第一行?_Java_File_File Io_Replace_Line - Fatal编程技术网

如何在Java中替换大文件的第一行?

如何在Java中替换大文件的第一行?,java,file,file-io,replace,line,Java,File,File Io,Replace,Line,我想用Java清空文本文件的第一行。这个文件有几GB,我不想复制。根据来自的建议,我试图使用RandomAccessFile来实现这一点,但是它写得太多了 这是我的密码: RandomAccessFile raInputFile = new RandomAccessFile(inputFile, "rw"); origHeaderRow = raInputFile.readLine(); raInputFile.seek(0); raInputFile.writeChars(Strings.re

我想用Java清空文本文件的第一行。这个文件有几GB,我不想复制。根据来自的建议,我试图使用RandomAccessFile来实现这一点,但是它写得太多了

这是我的密码:

RandomAccessFile raInputFile = new RandomAccessFile(inputFile, "rw");
origHeaderRow = raInputFile.readLine();
raInputFile.seek(0);
raInputFile.writeChars(Strings.repeat(" ",origHeaderRow.length()));
raInputFile.close();
如果您想要一些示例输入和输出,下面是发生的情况:

之前:

first_name,last_name,age
Doug,Funny,10
Skeeter,Valentine,9
Patti,Mayonnaise,11
Doug,AlsoFunny,10
之后:

                        alentine,9
Patti,Mayonnaise,11
Doug,AlsoFunny,10
在本例中,在大多数编辑器中,文件正确地以24个空格开头,但替换了48个字符(包括换行符)。粘贴到这里后,我看到奇怪的问号。双倍大小的替换让我觉得编码方面有些混乱,但我尝试了writeUTF,结果是一样的。

当您编写字符(在Java中为16位)时,每个字符使用两个字节。
我建议您尝试写入所需的字节数,否则您的空格将变成
nul
space
字节。

char
在Java中是2个字节

改用
writeBytes

raInputFile.writeBytes(Strings.repeat(" ",origHeaderRow.length()));

From看起来正是您想要的。

正如您所知,用现代文件系统“就地”编辑文件是不可能的。始终创建新副本。文件的编码是什么?1521? UTF8?UCS2?@rough,看起来Jon Skeet也是作为“Skeeter”出现的:@toto2:在这种情况下,这不是不可能的。覆盖单个字节非常简单。删除或插入字节是需要复制的。@Roland我找不到引用,但我读到即使覆盖字节,在大多数现代文件系统上也会进行复制。我很惊讶,所以我记得。我不记得它在哪里了。。。也许它不可靠。