gpt4 book ai didi

java - 为什么 File.renameTo 不会改变 File 指向的位置?

转载 作者:太空狗 更新时间:2023-10-29 22:45:59 26 4
gpt4 key购买 nike

File oldFile = new File("old");
if (oldFile.renameTo(new File("new"))){
System.out.println(oldFile.getName());//this prints "old"
}

我查看了 openJDK 源代码,renameTo(File dest) 函数如下所示:

public class File implements Serializable, Comparable<File> {
static private FileSystem fs = FileSystem.getFileSystem();
private String path;
...
public boolean renameTo(File dest) {
SecurityManager security = System.getSecurityManager();
if (security != null) {
security.checkWrite(path);
security.checkWrite(dest.path);
}
return fs.rename(this, dest);
}
...
}

所以路径变量永远不会改变。为什么呢?使用重命名的 File 变量的正确方法是什么?目前我是这样做的:

File oldFile = new File("/home/blin/misk/old");
File newFile = new File("/home/blin/misk/new");
if (oldFile.renameTo(newFile)){
oldFile=newFile;
System.out.println(oldFile.getName());//this prints "new"
}

最佳答案

最简单的解释是,to quote the Javadoc :

Instances of the File class are immutable; that is, once created, the abstract pathname represented by a File object will never change.

正如其他人所说,这里没有对错之分。然而,一旦库的设计者做出上述选择,renameTo 的当前行为就成为唯一可能的行为。

关于您的第二个代码片段,我看不出其中有任何缺陷。

关于java - 为什么 File.renameTo 不会改变 File 指向的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7320409/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com