试图同时重命名目录名和文件名。
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)
{
}但是,只有目录被成功地重命名,而不是文件名。
这些操作不能同时进行吗?
发布于 2015-07-18 18:39:49
这是因为您的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()。所以它肯定会失败。
即使在任何一个.exists()、file1或file2上调用false方法,它也只返回false。
发布于 2015-07-18 18:40:20
我觉得这个问题很有趣!节目的顺序总是很重要的。
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);
}我测试了密码!
发布于 2015-07-18 18:40:03
不是这样的。重命名dir之后,file1和file2对象仍然指向剩余文件之前的旧文件路径。您需要将它们设置为重命名的dir中的“新”文件。
https://stackoverflow.com/questions/31494111
复制相似问题