Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 重命名目录时重命名文件_Java_File_Directory_Java Io - Fatal编程技术网

Java 重命名目录时重命名文件

Java 重命名目录时重命名文件,java,file,directory,java-io,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();

正在尝试重命名目录名和文件名

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

    }
但是,只有目录被成功重命名,而不是文件名。

这些操作不能同时执行吗?

这是因为您的
目录
文件1
文件2
指向旧路径

执行这些行之后

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()
。所以它注定要失败

即使在
目录
文件1
文件2
上调用
.exists()
方法,它也只会返回
false

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

我发现这个问题非常有趣!节目的顺序总是很重要的

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);
}
我测试了代码