Java 当Files.move()失败时会发生什么?
正如标题所示,如果Java 当Files.move()失败时会发生什么?,java,Java,正如标题所示,如果Files.move(src,target,REPLACE_existing)失败,我想知道是否可以更改现有的目标文件?如果move()成功,目标文件会被完全覆盖吗?或者即使move()失败,目标文件也会被部分覆盖。我刚刚找到答案 当移动作为非原子操作执行,并引发IOException时,则不会定义文件的状态。原始文件和目标文件可能都存在,目标文件可能不完整,或者其某些文件属性可能未从原始文件复制 我刚刚找到答案 当移动作为非原子操作执行,并引发IOException时,则不会
Files.move(src,target,REPLACE_existing)
失败,我想知道是否可以更改现有的目标文件?如果move()
成功,目标文件会被完全覆盖吗?或者即使move()
失败,目标文件也会被部分覆盖。我刚刚找到答案
当移动作为非原子操作执行,并引发IOException
时,则不会定义文件的状态。原始文件和目标文件可能都存在,目标文件可能不完整,或者其某些文件属性可能未从原始文件复制
我刚刚找到答案
当移动作为非原子操作执行,并引发IOException
时,则不会定义文件的状态。原始文件和目标文件可能都存在,目标文件可能不完整,或者其某些文件属性可能未从原始文件复制
更安全的做法是先复制文件,然后删除文件。@Gilbert这不取决于此吗?例如,如果目标在同一个驱动器上,那么指针(或您称之为指针的任何东西)不是简单地改变了,并且没有实际发生数据传输吗?在这种情况下,执行“复制然后删除”操作的成本会更高,并且会增加出错的机会,不是吗?@Slaw,这是有道理的。但不确定move()的实际工作原理,也没有找到任何关于细节的文档。
java.nio.file
API的许多方面都没有说明,因为它必须尽可能保持抽象。由于并非每个文件系统的行为方式都完全相同,因此无法获得更详细的信息。更不用说文件系统[Provider]
实现不必与“真实的”本机文件系统交互;例如,有一个ZIP文件系统Provider,它允许访问ZIP文件,就好像它们是一个文件系统一样,而且还可以将所有内容都保存在内存中。虽然每个平台的实现都不同,但Windows实现是在中的,它最终调用,它最终从win32 API调用。不过,这些都是实现细节。更安全的做法是先复制文件,然后删除文件。@Gilbert这不取决于它吗?例如,如果目标在同一个驱动器上,那么指针(或您称之为指针的任何东西)不是简单地改变了,并且没有实际发生数据传输吗?在这种情况下,执行“复制然后删除”操作的成本会更高,并且会增加出错的机会,不是吗?@Slaw,这是有道理的。但不确定move()的实际工作原理,也没有找到任何关于细节的文档。java.nio.file
API的许多方面都没有说明,因为它必须尽可能保持抽象。由于并非每个文件系统的行为方式都完全相同,因此无法获得更详细的信息。更不用说文件系统[Provider]
实现不必与“真实的”本机文件系统交互;例如,有一个ZIP文件系统Provider,它允许访问ZIP文件,就好像它们是一个文件系统一样,而且还可以将所有内容都保存在内存中。虽然每个平台的实现都不同,但Windows实现是在中的,它最终调用,它最终从win32 API调用。然而,这些是实现细节。