Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么';重命名(…)是否创建目标的子目录?_Java_File Rename - Fatal编程技术网

Java 为什么';重命名(…)是否创建目标的子目录?

Java 为什么';重命名(…)是否创建目标的子目录?,java,file-rename,Java,File Rename,为什么不创建包含在目标文件路径中的子目录 比如说, 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

为什么不创建包含在目标文件路径中的子目录


比如说,

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()
)或手动创建子目录来确保所有子目录都存在。此方法中没有包含此功能是否有原因?

从其他角度来看,创建子目录可能会被视为意外的副作用。你确定每个人都需要它吗?

为什么

可能是为了与典型操作系统和其他编程语言运行库提供的API保持一致性/兼容性

可能是因为如果用户不是真的想这样做,那么创建中间目录是个坏主意;e、 g.如果他/她只是在路径中输入了一个目录名


但这并不真正相关。底线是,
renameTo
方法的行为就是这样。

当前的文件API在Java中没有很好的实现。在当前不存在的文件API中,有许多功能是需要的,例如移动、复制和检索文件元数据

我认为没有人能够给你一个关于API为什么是按原样编写的答案。可能是一个糟糕的初稿,但由于向后兼容性问题而无法更改


这些问题已经在即将发布的Java7中得到了解决。已经创建了一个全新的API来处理文件。

您有答案,但我的思路是: 添加新方法File.renameTo(文件src、文件目标、int makeDirs)的功能请求

MakeDir有三个常量: 1) 不生成子文件夹/dir 2) 仅在最终文件夹不存在时生成该文件夹,这意味着如果指定/r1/r2/r3/file.extn,则仅在其不存在时生成r3,如果r2或任何其他文件夹不存在,则返回false。 3) 制作所有可能的子目录

  • 如果它是一个没有子文件夹的操作系统,那么现在就做吧
  • 旧方法将保持原样

  • “也许因为我不认为这是重命名,我认为是‘移动’:)KAJ,它是一个动作,但是它是虚假的,必须明确地创建所有的子目录,或者确保在调用这个“便利”方法之前,它们存在。我知道它是做什么的……我只是不喜欢这个名字,函数依赖于平台,结果只返回一个布尔值。嗯,文件类有很多我不喜欢的地方。它本来应该是一个界面。@Kaj,在我的例子中,平台依赖性不是问题,因为我们几乎都是Windows:/。反对票是怎么回事?这里的人很可笑……我想这只是一种期待。如果我给它传递一个目的地,我假设它将完成创建该文件路径中不存在的任何子目录的工作。如果它是隐式完成的,那么生成的代码会更干净。如果在javadoc中提到它会更好,你知道吗?我不认为创建中间目录是个坏主意。这只需要程序员更加专注。你在和错误的人说话。如果它与你有关,请提交一份bug报告。@Moonbeam:我想只有你。您的需求非常具体(windows机箱、本地驱动器),而库是根据“通用”用途定制的。当然,他们不可能把所有东西都放在标准包/方法中,不是吗?如前所述,如果由于某种原因移动失败,我个人不希望重命名为创建目标目录。当然,它们可以通过传递一个标志来配置
    renameTo
    的行为。但这值得吗?当然,是IMO,YMMV。就像我说的-如果你觉得它的行为应该有所不同,请提交一份标有“功能请求”的bug报告。如果您觉得javadoc不正确/不完整,请针对javadoc提交错误报告。我不认为你是荒谬的。。。但是我不认为对方法行为的“正确性”有任何争论。@Moonbeam-在Java库中实现它同样困难(即不可能)。如果你认为这很容易,试着为
    重命名为
    (例如,在一个单独的答案中)编写详细的伪代码,我会为你批评它。这比抱怨和猜测要好得多。