Java 从文件中删除数据时,临时文件无效';t重命名回原始文件
我正在尝试根据用户输入删除一行。myFile.txt看起来像:Java 从文件中删除数据时,临时文件无效';t重命名回原始文件,java,Java,我正在尝试根据用户输入删除一行。myFile.txt看起来像: Matt Brian John 但是,当我输入“Brian”(删除此行)时,它会在临时文件(myTempFile.txt)上被删除,但不会重命名回原始文件(myFile)。为什么会这样?谢谢 import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileNotFoun
Matt
Brian
John
但是,当我输入“Brian”(删除此行)时,它会在临时文件(myTempFile.txt)上被删除,但不会重命名回原始文件(myFile)。为什么会这样?谢谢
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;
public class testcode {
public static void main(String[] args) throws IOException {
File inputFile = new File("myFile.txt");
File tempFile = new File("myTempFile.txt");
Scanner myScan = new Scanner(System.in);
BufferedReader reader = new BufferedReader(new FileReader(inputFile));
BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile));
System.out.print("Please enter student first name: ");
String lineToRemove = myScan.nextLine();
String currentLine;
while((currentLine = reader.readLine()) != null)
{
String trimmedLine = currentLine.trim();
if(!trimmedLine.contains(lineToRemove)) {
writer.write(trimmedLine);
writer.newLine();
}
tempFile.renameTo(inputFile);
}
writer.close();
reader.close();
myScan.close();
}
}
您的原始文件已打开,这就是它无法工作的原因 我建议在while之后将
重命名为(…)
,并放置一个阅读器.close()代码>在它之前。在原始文件的每个readLine()
处重命名它是没有意义的。进行处理,然后重命名临时文件
比如:
while((currentLine = reader.readLine()) != null)
{
String trimmedLine = currentLine.trim();
if(!trimmedLine.contains(lineToRemove)) {
writer.write(trimmedLine);
writer.newLine();
}
}
reader.close();
writer.close();
inputFile.delete(); //Added to my original post.
tempFile.renameTo(inputFile);
例如,见:
经过一些研究,我看到了这个:。如果文件确实存在,重命名将不起作用。尝试在重命名之前删除输入文件。不幸的是,我在发布之前尝试过。仍然是同一个问题,也是writer.flush();或者可能是inputFile.close();或FileReader FileReader=新的FileReader(inputFile);然后是fileReader.close();这是因为这些文件没有发布,这就是为什么。这些建议都不起作用。在尝试文件读取器位时,我收到一条消息说:FileReaderName类型的readLine()方法未定义。还有其他建议吗?