.renameTo函数的替代品

时间:2016-02-26 13:23:02

标签: java file text rename file-writing

我一直在尝试使用以下代码在java中重命名文本文件。

tempFile.renameTo(inFile)

但是,它似乎没有重命名文件。

我的项目的目的是编辑文本文件中的一行文本 1.首先读取文件并将该行存储为oldLine 2.获取已编辑的行并将其存储为newLine 3.将newLine写入临时文件 4.删除主文件并将临时文件重命名为主文件的名称。

这个重命名功能有替代方法吗?

使用完整代码进行编辑

   try {
        File inFile = new File("Members.txt");
        File tempFile = new File("MembersTemp.txt");

        BufferedReader BR = new BufferedReader(new FileReader(inFile));
        PrintWriter PW = new PrintWriter(new FileWriter(tempFile));

        inFile.setReadable(true);
        inFile.setWritable(true);
        tempFile.setReadable(true);
        tempFile.setWritable(true);

        String line = null;

        while ((line = BR.readLine()) != null) {

            if (!old.equals(newLine)) {
                //String replace = old.replace(old, newLine);
                PW.println(newLine);
                PW.flush();
            }
        }

        PW.close();
        BR.close();

        if (!tempFile.renameTo(inFile)) {
            JOptionPane.showMessageDialog(
                null,
                "Error",
                "Edit File",
                JOptionPane.WARNING_MESSAGE);
        } else {
              JOptionPane.showMessageDialog(
              null,
              "File saved successfully",
              "Edit File",
              JOptionPane.INFORMATION_MESSAGE);
        }

        dispose();
        new Edit_Member().setVisible(true);

    } catch (IOException | HeadlessException e) {
        e.printStackTrace(); 
        JOptionPane.showMessageDialog(
        null,
        "Catch Error",
        "Edit File",
        JOptionPane.WARNING_MESSAGE);

    }

已更新为Files.move

Path source = tempFile.toPath();
Path newdir = inFile.toPath();
Files.move(source, newdir, REPLACE_EXISTING);

上面的代码给出了以下错误:

java.nio.file.FileSystemException:Members.txt:进程无法访问该文件,因为它正由另一个进程使用。

我以为我关闭了所有的读者和作家,所以这个错误真的不应该存在。

1 个答案:

答案 0 :(得分:0)

我不确定在没有看到代码的情况下会出现什么问题,但是从Java SE 7开始,推荐的移动/重命名文件的方法是Files.move(NIO.2文件API)。