Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从文件中删除数据时,临时文件无效';t重命名回原始文件_Java - Fatal编程技术网

Java 从文件中删除数据时,临时文件无效';t重命名回原始文件

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

我正在尝试根据用户输入删除一行。myFile.txt看起来像:

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()方法未定义。还有其他建议吗?