0

[编辑]我无法使用类renameTo()方法重命名我的文件File。好的,我搜索并找到了一个解释相同的问题

File.renameTo() 失败?

我还阅读了 Java Doc,renameTo()其中说:

此方法的行为的许多方面本质上是平台相关的:重命名操作可能无法将文件从一个文件系统移动到另一个文件系统,它可能不是原子的,并且如果具有目标抽象路径名的文件可能不会成功已经存在。应始终检查返回值以确保重命名操作成功。

好的,我知道该renameTo()方法取决于平台。

然后我创建了对象FileOutputStream并调用了close()方法,现在我尝试renameTo()了方法并且我的文件被重命名了,

问题:

  • 我无法理解为什么在创建FileOutputStream我的renameTo()方法的对象后起作用的原因?

环境: Windows XP,用户:管理员

代码:

    File f = null;
    File f1 = null;
    boolean isFileRenamed = false;

    try {
        // create new File objects
        f = new File("C:\\originalFile.txt");
        f1 = new File("C:\\renamedFile.txt");

        // I need to write following code to rename the file
        // I tried without FileOutputStram object but then renameTo() did not work
        FileOutputStream fos = new FileOutputStream(f);
        fos.close();

        isFileRenamed = f.renameTo(f1);
        System.out.print("File renamed? " + isFileRenamed);

    } catch (Exception e) {
        e.printStackTrace();
    }

寻找答案为什么 renameTo() 方法在创建对象后起作用FileOutputStram。我的应用程序也使用 Java1.6,所以我的Files类选项已关闭。我renameTo()只需要使用方法

4

1 回答 1

5

这不是 JDK 中的错误。从文档中

此方法的行为的许多方面本质上是平台相关的:重命名操作可能无法将文件从一个文件系统移动到另一个文件系统,它可能不是原子的,并且如果具有目标抽象路径名的文件可能不会成功已经存在。应始终检查返回值以确保重命名操作成功。

(我的重点)

不同的驱动器是不同的文件系统。在文件系统之间移动文件需要将文件数据从旧文件系统复制到新文件系统,复制完成后,将文件删除到其原始位置。renameTo不承担这项工作,它适用于可以简单地在文件系统内移动文件的简单情况。


您在下面说它甚至在文件系统中都不起作用。请注意,如果您使用的是 Windows 7,则必须以管理员身份运行才能在C:驱动器的根目录中创建文件。

如果我以管理员身份在命令提示符下运行,则此方法有效:

示例代码:

import java.io.*;

public class FileMove
{
    public static final void main(String[] args) {
        File f = null;
        File f1 = null;
        boolean bool = false;

        try {
            // create new File objects
            f = new File("C:\\test.txt");
            f1 = new File("C:\\renamed.txt");

            bool = f.renameTo(f1);

            System.out.print("File renamed? " + bool);

        } catch (Exception e) {
            // if any error occurs
            e.printStackTrace();
        }
    }
}

示例运行:

C:\>echo "测试 1 2 3">test.txt
C:\>键入 c:\test.txt
“测试 1 2 3”
C:\>键入 c:\renamed.txt
该系统找不到指定的文件。
C:\>java -cp 。文件移动
文件重命名?真的
C:\>输入重命名的.txt
“测试 1 2 3”
C:\>

但正如millimoose 在评论中指出的那样,有Files.Move方法

于 2013-07-27T17:26:00.247 回答