在重命名目录的同时重命名文件

4
尝试同时重命名目录名称和文件名称。
try
    {
        File dir = new File("DIR");
        dir.mkdir();
        File file1 = new File(dir,"myfile1.txt");
        file1.createNewFile();
        File file2 = new File(dir,"myfile2.txt");
        file2.createNewFile();

        dir.renameTo(new File("myDIR"));            
        System.out.print(file1.renameTo(new File(dir,"myf1.txt")));
    }
    catch(IOException ie)
    {

    }

然而,只有目录被成功重命名,而文件名没有被重命名。
这些操作不能同时进行吗?

3个回答

4
这是因为你的dirfile1file2指向了旧路径。
执行这些代码后,
File dir = new File("DIR");
dir.mkdir();
File file1 = new File(dir,"myfile1.txt");
file1.createNewFile();
File file2 = new File(dir,"myfile2.txt");
file2.createNewFile();

这些将是变量引用的路径。

dir = "DIR" // Exists
file1 = "DIR\myfile1.txt" //Exists
file2 = "DIR\myfile2.txt" //Exists

在您执行之后,
    dir.renameTo(new File("myDIR"));            

变量引用的路径仍然相同。
dir = "DIR" // Doesn't exist anymore because it's moved.
file1 = "DIR\myfile1.txt" // Doesn't exist anymore because it's moved along with dir.
file2 = "DIR\myfile2.txt" // Doesn't exist anymore because it's moved along with dir.

因此,当您进行调用时,

    System.out.print(file1.renameTo(new File(dir,"myf1.txt")));

您正在调用不存在的文件和目录上的 renameTo() 方法,因此肯定会失败。 即使您在任何一个 dirfile1file2 上调用 .exists() 方法,它也只会返回 false

1
我发现这个问题非常有趣!程序的顺序总是很重要的。
try
{
    File dir = new File("DIR");
    dir.mkdir();

这里的“dir”指向文件系统中的一个位置。
    File file1 = new File(dir,"myfile1.txt");
    file1.createNewFile();
    File file2 = new File(dir,"myfile2.txt");
    file2.createNewFile();

当你重命名时,意味着dir将指向不同的位置。
    dir.renameTo(new File("myDIR"));  

您正在尝试重命名一个指向已过时位置的文件。
    System.out.print(file1.renameTo(new File(dir,"myf1.txt")));
}
catch(IOException ie)
{
    System.out.println(ie);
}

尝试以下代码,我已将重命名文件后重命名文件夹的代码移动到了下面。
try
{
    File dir = new File("DIR");
    dir.mkdir();

    File file1 = new File(dir,"myfile1.txt");
    file1.createNewFile();
    File file2 = new File(dir,"myfile2.txt");
    file2.createNewFile();   
    System.out.print(file1.renameTo(new File(dir,"myf1.txt")));         

    dir.renameTo(new File("myDIR"));
}
catch(IOException ie)
{
    System.out.println(ie);
}

我测试了代码!


0

不是这样的。 在你重命名目录之后,file1和file2对象仍然指向剩余部分之前的旧文件路径。 你需要将它们设置为重命名目录中的“新”文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接