首页 > 解决方案 > FileUtils.moveDirectory(src,dst) 在目录之间移动文件是否安全

问题描述

我必须将服务器中的大文件从一个文件夹移动到另一个文件夹,我正在使用

FileUtils.moveDirectory(src, dst);

这很快,因为moveDirectory只是将 重命名srcdst,在某些情况下,它dst是 的子文件夹src,它会将文件复制到dst并从中删除src(在我的情况下dst永远不会发生这种情况,永远不会是 的子目录src)。

现在,是否有可能FileUtils.moveDirectory(src, dst);失败,如果是,我的文件是否会保存在 source 中?因为这是唯一的副本,我不能丢失文件。要么完全移动到,dst要么只是失败并将我的文件留在src.

标签: javafile

解决方案


简短的回答:是的;即使出现问题,文件也会在src.

在低级别,操作是复制然后删除,而不是重命名。这样,代码可以确保在任何情况下都不会在移动之前删除内容;从概念上讲,这意味着该文件可能不存在于dest(磁盘空间不足),或者可能同时存在于srcdest(删除权限被拒绝),但永远不会丢失。也意味着在短时间内您将使用 2 倍的磁盘空间,因此请记住这一点。

FileUtils的源代码:见第 2881 行


推荐阅读