java - 如何在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 不会引发下一行异常。该程序的目的是将新想法添加并保存到文本文件中,这就是我不想覆盖现有文本行的原因。
解决方案
一旦您以写入模式打开正在读取的文件,读取的文件描述符就会损坏。它可能没有损坏,但是一旦写了一些东西,它就会被损坏,尤其是当描述符读取的内容被覆盖时。
所以,你应该采取重写和替换的方法:
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
);
推荐阅读
- mysql - 来自另一个字段的 Codeigniter 查询更新集
- scala - java.lang.NoClassDefFoundError: org/apache/flink/streaming/api/scala/StreamExecutionEnvironment
- c# - 如何使用 Dapper.Contrib 通过唯一键获取实体?
- ios - 为什么我在快速向上移动键盘时视图和滚动视图之间出现差距?
- c# - NavigationView 不会在启用/需要页面缓存的情况下切换
- php - 如何从 mapbox 中的 php 文件中获取多个实时数据标记?
- angular - 如何在不更改默认超时的情况下向 browser.wait() 添加消息?
- javascript - ES6:根据另一个数组顺序对数组进行排序
- javascript - 使用 Leaflet.PolylineDecorator 我得到未定义的读取属性“破折号”
- java - 黄瓜junit中的标签继承