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