我必须将服务器中的大文件从一个文件夹移动到另一个文件夹,
FileUtils.moveDirectory(src, dst);
这是快速的,因为moveDirectory
只是将src
重命名为dst
,在某些情况下,dst
是src
的子文件夹,它将文件复制到dst
并从src
中删除(在我看来,dst
从来都不是src
的子目录)。
现在,FileUtils.moveDirectory(src, dst);
是否有可能失败,如果可以,我将在源文件中保存文件吗?因为这是唯一的副本,所以我不能丢失文件。要么完全移动到dst
,要么失败,然后将我的文件保留在src
。
答案 0 :(得分:1)
简短的回答:是的;即使出现问题,文件也将位于src
中。
在较低级别上,操作是复制然后删除,而不是重命名。这样,代码可以确保在任何情况下都不会在移动之前删除所有内容。从概念上讲,这意味着文件可能不存在于dest
(磁盘空间不足)中,或者可能同时存在于src
和dest
(拒绝删除权限)中,但是永远不会丢失。这也意味着在短时间内您将使用2倍的磁盘空间,因此请记住这一点。
FileUtils的源代码:请参见第2881行