我正在尝试从文本文件中删除一行文本,而不需要将其复制到临时文件中。我试图通过使用PrintWriter和Scanner来实现这一点,并使它们同时遍历文件,写入器写入Scanner读取的内容并覆盖每一行相同的东西,直到到达我想要删除的行。然后,我推进Scanner但不是写手,然后像以前一样继续。以下是代码:
但首先,参数:我的文件名称是数字,因此这将读取1.txt或2.txt等等,因此f指定文件名。我在文件的构造函数中将其转换为字符串。int n是我想要删除的行的索引。
但首先,参数:我的文件名称是数字,因此这将读取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”和“no line found”。它指向不同的行; 似乎任何nextLine()调用都可能导致这种情况。是否可能通过这种方式删除一行?如果是,我做错了什么?如果不是,为什么?(顺便说一句,以防你需要知道,文本文件大约有500行。我不知道这是否算大或是否重要。)