重命名目录时重命名文件
renaming file while renaming directory
正在尝试重命名目录名和文件名。
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)
{
}
但是,只有目录被成功重命名,而不是文件名。
这些操作不能同时进行吗?
这是因为您的 dir
、file1
和 file2
指向旧路径。
执行完这些行后,
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()
。所以它注定会失败。
即使您对 dir
、file1
或 file2
中的任何一个调用 .exists()
方法,它也只会 return false
。
不是这样的。
重命名 dir 后,file1 和 file2 对象仍然指向其余文件路径之前的旧文件路径。
您需要将它们设置为重命名目录中的 "new" 个文件。
我觉得这个问题很有意思!程序的顺序总是很重要。
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);
}
我测试了代码!
正在尝试重命名目录名和文件名。
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)
{
}
但是,只有目录被成功重命名,而不是文件名。
这些操作不能同时进行吗?
这是因为您的 dir
、file1
和 file2
指向旧路径。
执行完这些行后,
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()
。所以它注定会失败。
即使您对 dir
、file1
或 file2
中的任何一个调用 .exists()
方法,它也只会 return false
。
不是这样的。 重命名 dir 后,file1 和 file2 对象仍然指向其余文件路径之前的旧文件路径。 您需要将它们设置为重命名目录中的 "new" 个文件。
我觉得这个问题很有意思!程序的顺序总是很重要。
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);
}
我测试了代码!