重命名目录时重命名文件

时间:2015-07-18 18:15:14

标签: java file directory java-io

尝试重命名目录名和文件名。

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

答案 0 :(得分:4)

这是因为您的file1file2File 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()

您正在对不存在的文件和不存在的目录调用.exists()。所以它一定会失败。

即使您在dirfile1file2中的任何一个上调用false方法,它也只会返回var a = function () { } a.prototype.foo = function () { bar(); } var b = function () { a.call(this) } b.prototype = Object.create(a.prototype); b.prototype.constructor = b;

答案 1 :(得分: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);
}

我测试了代码!

答案 2 :(得分:0)

不喜欢这样。 重命名目录后,file1和file2对象仍然指向剩余的旧文件路径。 你需要将它们设置为" new"重命名的目录中的文件。

相关问题