我正在尝试使用这段代码执行此类任务:
File copyOfFirstVar= tmp1;
File copyOfSecondVar= tmp2;
File tmpVar = File.createTempFile("temp", "tempFile");
tmp1.renameTo(tmpVar)
tmp2.renameTo(copyOfFirstVar);
tmp1.renameTo(copyOfSecondVar);
其中tmp1和tmp2是来自File类的对象 - >我要重命名的文件, 但那没有做任何事情。
答案 0 :(得分:0)
正如评论中所说的那样,您引用了几次相同的File
(temp
文件)。
自:
File copyOfFirstVar= tmp1;
File copyOfSecondVar= tmp2;
你的逻辑变为:
tmp1.renameTo(tmpVar); // now tmp1 and tmpVar are references to the same file
tmp2.renameTo(tmp1); // now tmp2 and tmp1 are references to the same file
tmp1.renameTo(tmp2); // see above
因此,您最终得到tmp1
,tmp2
和tmpVar
三个引用相同File
的内容。
您应避免使用File
引用进行交换,只需将路径用作String
。
File copyOfFirstVar= tmp1;
File copyOfSecondVar= tmp2;
String firstPath = copyOfFirstVar.getAbsolutePath();
String secondPath = copyOfSecondVar.getAbsolutePath();
File tmpVar = File.createTempFile("temp", "tempFile");
tmp1.renameTo(tmpVar);
tmp2.renameTo(new File(firstPath));
tmp1.renameTo(new File(secondPath));
另请注意,正如其他人所指出的,如果目的地renameTo
存在,File
将会失败。
答案 1 :(得分:0)
File.createTempFile(...)将在“temp”文件夹中创建一个物理文件。因此,将另一个文件重命名为该名称将失败,因为文件已经存在。
答案 2 :(得分:0)
您的程序中的问题是您正在更改/交换偶数路径以及文件名,因此即使您执行renameTO,它实际上也会使用相同的旧名称重新命名该文件。
以下是实现您的目标的程序:
public class SwapFileName {
public static void main(String[] args) {
File file1 = new File("C:\\temp1\\asd.txt");
File file2 = new File("C:\\temp2\\dsa.txt");
boolean isSuccess = swapName(file1, file2);
System.out.println(isSuccess);
}
public static boolean swapName(File tmp1, File tmp2) {
String path1 = tmp1.getAbsolutePath().substring(0, tmp1.getAbsolutePath().lastIndexOf(File.separator)+1);
String fileName1 = tmp2.getName();
File swapFile1 = new File(path1 + File.separator + fileName1);
String path2 = tmp2.getAbsolutePath().substring(0, tmp2.getAbsolutePath().lastIndexOf(File.separator)+1);
String fileName2 = tmp1.getName();
File swapFile2 = new File(path2 + File.separator + fileName2);
return (tmp1.renameTo(swapFile1) && tmp2.renameTo(swapFile2));
}
}