Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.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如何将字符串插入txt文件的特定行,例如第6行_Java_File_Filewriter - Fatal编程技术网

Java如何将字符串插入txt文件的特定行,例如第6行

Java如何将字符串插入txt文件的特定行,例如第6行,java,file,filewriter,Java,File,Filewriter,我想在.txt文件的特定位置插入一行。现在我知道的唯一方法是将整个文件作为数组读出,将给定的行放在正确的位置,然后将整个内容写回。有没有一种更简单的方法可以使用Java实现这一点?我的目的是尽可能减少文件访问。尝试使用BufferedReader同时读写 其思想是读取该行并立即将其写入另一个文件 BufferedReader rd = null; BufferedWriter wt = null; try { rd = new BufferedReader(

我想在.txt文件的特定位置插入一行。现在我知道的唯一方法是将整个文件作为数组读出,将给定的行放在正确的位置,然后将整个内容写回。有没有一种更简单的方法可以使用Java实现这一点?我的目的是尽可能减少文件访问。

尝试使用
BufferedReader同时读写

其思想是读取该行并立即将其写入另一个文件

BufferedReader rd = null;
    BufferedWriter wt = null;

    try {
        rd = new BufferedReader(
                new InputStreamReader(
                        new FileInputStream("/yourfile.txt"), "UTF-8")
                );

        wt = new BufferedWriter(
                new OutputStreamWriter(
                        new FileOutputStream(
                                "/newfile" + ".txt"), "UTF-8")
                );

        int count = 0;

        for (String line; (line = reader.readLine()) != null;) {

            count++

            if (count == 6) {
                // add your line 
                // wt.write(newline);
            }

            wt.write(line);
            wt.newLine();
        }
    } finally {
        close(wt);
        close(rd);
    }
有没有一种更简单的方法可以使用Java实现这一点

对于Java 7,除非插入点位于大型文件的末尾,否则我只需执行以下操作:

List<String> lines = Files.readAllLines(path, StandardCharsets.UTF_8);
lines.add(position, extraLine);
Files.write(path, lines, StandardCharsets.UTF_8);
List lines=Files.readAllLines(路径,StandardCharsets.UTF_8);
行。添加(位置、外线);
写入(路径、行、标准字符集.UTF_8);

RandomAccessFile
无法解决此问题。这是在邮件中讨论的。无论如何,您都应该重写文件。

您只能使用一些缓冲区来读写它,修改它,并将写操作immidate to new以保存程序内存。

不,没有其他方法。虽然您不需要数组来执行此操作。@assylias此问题中的OP特别关注减少对文件的访问,而“复制您”链接没有这种关注,并且公认的答案建议只读取数组。将所有行读取到内存是多余的。更好的方法是逐行读取,将每一行保存到临时文件中。在获得正确的位置后,放置额外的行并重写文件的其余部分。最后,删除原始文件并将临时文件重命名为原始名称。@agad您如何建议在不先阅读原始文件的情况下“重写文件的其余部分?”@assylias当然您必须阅读它,但您不需要将所有行存储在memory@agad除非文件很大,否则我不认为这是个问题——Java中的内存分配非常便宜。。。对于不适合内存的较大文件,您显然需要不同的起始格式。如果该文件只包含几行,这不是问题,但是,从这个问题来看,我有一种感觉,该文件包含数千行或更多行。