how to update certain parts of text file in java

走远了吗. 提交于 2019-12-11 03:19:38

问题


I want to be able to update a certain line on a text file. But I get the error that it cannot delete the file, why do I get this error?

public class Main {
    public static void main(String[] args) {
        Main rlf = new Main();
        rlf.removeLineFromFile("F:\\text.txt", "bbb");
    }

    public void removeLineFromFile(String file, String lineToRemove) {
        try {
            File inFile = new File(file);

            if (!inFile.isFile()) {
                System.out.println("Parameter is not an existing file");
                return;
            }

            //Construct the new file that will later be renamed to the original filename.
            File tempFile = new File(inFile.getAbsolutePath() + ".tmp");

            BufferedReader br = new BufferedReader(new FileReader(file));
            PrintWriter pw = new PrintWriter(new FileWriter(tempFile));

            String line = null;

            //Read from the original file and write to the new
            //unless content matches data to be removed.
            while ((line = br.readLine()) != null) {

                if (!line.trim().equals(lineToRemove)) {

                    pw.println(line);
                    pw.flush();
                }
            }
            pw.close();
            br.close();

            //Delete the original file
            if (!inFile.delete()) {
                System.out.println("Could not delete file");
                return;
            }

            //Rename the new file to the filename the original file had.
            if (!tempFile.renameTo(inFile)) System.out.println("Could not rename file");

        }
        catch (FileNotFoundException ex) {
            ex.printStackTrace();
        }
        catch (IOException ex) {
            ex.printStackTrace();
        }
    }
}​

回答1:


The program works for me. Perhaps you are having an environmental issue.




回答2:


You should look into RandomAccessFile.

This will let you seek to the place in the file you want, and only update the part that you want to update.




回答3:


As Justin pointed out above, you should be using the RandomAccessFile kind of api if you want to modify parts of file. The approach you are trying to use has a lot of potential problems.

  • It requires a tmp file to be created in addition. May not scale for large files (I am not aware of your problem domain, though)
  • Trying to juggle files also can cause several potential exceptions, and requires lots of error handling.



回答4:


You can create a new instance (to close the old) by new then delete using it.
Same file delete problem here



来源:https://stackoverflow.com/questions/3878372/how-to-update-certain-parts-of-text-file-in-java

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!