首页 > 解决方案 > 如何在java中将文本写入文本文件中的下一个空行

问题描述

package ideat;

import java.nio.file.Paths;
import java.io.FileWriter;
import java.util.Scanner;

public class Paaohjelma {

    public static void main(String[] args) {
        
        try {
            
            Scanner tLuk = new Scanner(Paths.get("ideat.txt"));
            FileWriter tKirj = new FileWriter("ideat.txt");
            
            for (String line = tLuk.nextLine(); line.isBlank(); tKirj.append("\n")) {
                tKirj.write("textHere");
            }
   
            tKirj.close();
            tLuk.close();
            
        } catch (Exception e) {
            System.out.println(e);
        }
    }
}

我创建了一个循环遍历 txt 文件,直到找到要写入的空行,但这不起作用,因为当 Scanner 尝试读取下一行为空时,java 不会引发下一行异常。该程序的目的是将新想法添加并保存到文本文件中,这就是我不想覆盖现有文本行的原因。

标签: javafilewriter

解决方案


一旦您以写入模式打开正在读取的文件,读取的文件描述符就会损坏。它可能没有损坏,但是一旦写了一些东西,它就会被损坏,尤其是当描述符读取的内容被覆盖时。

所以,你应该采取重写和替换的方法:

        try {
            Scanner tLuk = new Scanner(Paths.get("ideat.txt"));
            FileWriter tKirj = new FileWriter("ideat.txt.tmp");
            
            while (tLuk.hasNextLine()) {
                String line = tLuk.nextLine();
                if (line.isBlank()) {
                    tKirj.write("textHere");
                } else {
                    tKirj.write(line);
                }
            }

            tKirj.close();
            tLuk.close();
        } catch (Exception e) {

然后,将文件替换ideat.txtideat.txt.tmp.

Files.move(
    Paths.get("ideat.txt.tmp"),
    Paths.get("ideat.txt"),
    StandardCopyOption.REPLACE_EXISTING
);

推荐阅读