为什么File.renameTo(...)
没有创建目标文件路径中包含的子目录?
例如,
File source = new File(System.getProperty("user.dir") +
"/src/MyFolder/MyZipFolder.zip");
File dest = new File(System.getProperty("user.dir") +
"/src/MyOtherFolder/MyZipFolder.zip");
System.out.println(source.renameTo(dest));
由于MyOtherFolder
不存在,因此始终返回false
。为了实现这一点,我必须通过以编程方式(即mkdirs()
)或手动创建所有子目录来确保它们存在。这个方法中没有包含此功能的原因是什么?
答案 0 :(得分:3)
为什么?
可能与典型操作系统和其他编程语言运行时库提供的API保持一致/兼容。
可能因为如果用户并不真的意味着要发生中间目录,那么创建中间目录是个坏主意;例如如果他/她只是错误地输入了路径中的一个目录名。
但它并不真正相关。最重要的是,这是renameTo
方法的行为方式。
答案 1 :(得分:1)
从其他角度来看,创建子目录可能被视为意外的副作用。你确定每个人都需要它吗?
答案 2 :(得分:1)
目前的File API在Java中实现得不是很好。在当前不存在的文件API中存在许多功能,例如移动,复制和检索文件元数据。
我认为没有人能够回答为什么API按原样编写。可能是一个糟糕的初稿,由于向后兼容性问题而上线并且无法更改。
这些问题已在即将发布的Java 7中得到解决。已经创建了一个全新的API来处理文件java.nio.file.Files。
答案 3 :(得分:0)
你有答案,但我在思考: 添加新方法的功能请求File.renameTo(File src,File destination,int makeDirs)
有三个常量用于makeDirs: 1)不要制作子文件夹/目录 2)只有最终文件夹不存在意味着如果你指定/r1/r2/r3/file.extn然后只有r3如果它不存在,如果r2或任何其他不存在则返回false。 3)制作所有可能的子目录