【问题标题】:renaming file while renaming directory重命名目录时重命名文件
【发布时间】:2015-10-08 06:06:14
【问题描述】:

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

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)
    {

    }

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

【问题讨论】:

    标签: java file directory java-io


    【解决方案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】:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 2013-12-05
          • 1970-01-01
          • 2011-07-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-07-07
          • 2019-11-13
          • 1970-01-01
          相关资源
          最近更新 更多