how to update certain parts of text file in java

2019-07-24 15:17发布

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();
        }
    }
}​

4条回答
Root(大扎)
2楼-- · 2019-07-24 15:46

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

查看更多
beautiful°
3楼-- · 2019-07-24 15:46

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

查看更多
一夜七次
4楼-- · 2019-07-24 16:02

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.
查看更多
我欲成王,谁敢阻挡
5楼-- · 2019-07-24 16:04

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.

查看更多
登录 后发表回答