【问题标题】:How to write text to a next empty line in text file in java如何在java中将文本写入文本文件中的下一个空行
【发布时间】:2021-04-25 10:31:23
【问题描述】:
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 不会引发下一行异常。该程序的目的是将新想法添加并保存到文本文件中,这就是我不想覆盖现有文本行的原因。

【问题讨论】:

  • 为什么不直接使用 .append("text") ?
  • 将文本写入文件开头,然后添加“\n”如何?

标签: java filewriter


【解决方案1】:

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

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

        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.txt 替换为ideat.txt.tmp

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

【讨论】:

  • 感谢您的回答!然而这不起作用。它不会向文件 ideat.txt 写入任何内容。
  • @Ode 你不能打开同一个文件两次同时读写,尤其是对于文本模式。编写一个新文件ideat.txt.tmp,然后用它替换ideat.txt
猜你喜欢
  • 2018-10-19
  • 1970-01-01
  • 2011-11-09
  • 2013-10-18
  • 2014-03-15
  • 1970-01-01
  • 2019-08-23
  • 1970-01-01
  • 2018-09-14
相关资源
最近更新 更多