我正在尝试从文本文件中删除一行文本而不复制到临时文件。我正在尝试通过使用 Printwriter 和 Scanner 并让它们同时遍历文件来做到这一点,作家写下 Scanner 读取的内容并用相同的东西覆盖每一行,直到它到达我希望的行删除。然后,我推进扫描仪而不是写入器,并像以前一样继续。这是代码:
但首先,参数: 我的文件名是数字,所以这将读取 1.txt 或 2.txt 等,因此 f 指定文件名。我在文件的构造函数中将其转换为字符串。Int n 是我要删除的行的索引。
public void deleteLine(int f, int n){
try{
Scanner reader = new Scanner(new File(f+".txt"));
PrintWriter writer = new PrintWriter(new FileWriter(new File(f+".txt")),false);
for(int w=0; w<n; w++)
writer.write(reader.nextLine());
reader.nextLine();
while(reader.hasNextLine())
writer.write(reader.nextLine());
} catch(Exception e){
System.err.println("Enjoy the stack trace!");
e.printStackTrace();
}
}
它给了我奇怪的错误。它在堆栈跟踪中显示“NoSuchElementException”和“找不到行”。它指向不同的线;似乎任何 nextLine() 调用都可以做到这一点。是否可以通过这种方式删除一行?如果是这样,我做错了什么?如果不是,为什么?(顺便说一句,以防万一你想要这个,文本文件大约有 500 行。不过,我不知道这是否算大甚至重要。)