如何在java中更新文本文件的某些部分

时间:2010-10-07 03:01:47

标签: java text-files bufferedreader

我希望能够更新文本文件中的某一行。 但是我收到错误,它无法删除文件,为什么我会收到此错误?

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 个答案:

答案 0 :(得分:2)

您应该查看RandomAccessFile

这将允许您搜索所需文件中的位置,并仅更新要更新的部分。

答案 1 :(得分:2)

该计划适合我。也许你遇到了环境问题。

答案 2 :(得分:0)

正如Justin在上面指出的那样,如果你想修改文件的部分,你应该使用RandomAccessFile类api。您尝试使用的方法存在很多潜在问题。

  • 它还需要创建一个tmp文件。可能无法扩展大文件(我不知道您的问题域),
  • 尝试处理文件也会导致几个潜在的异常,并且需要大量的错误处理。

答案 3 :(得分:0)

您可以new创建一个新实例(关闭旧实例),然后使用它删除 同一文件删除问题here