java - FileUtils.moveDirectory(src,dst) 在目录之间移动文件是否安全
问题描述
我必须将服务器中的大文件从一个文件夹移动到另一个文件夹,我正在使用
FileUtils.moveDirectory(src, dst);
这很快,因为moveDirectory
只是将 重命名src
为dst
,在某些情况下,它dst
是 的子文件夹src
,它会将文件复制到dst
并从中删除src
(在我的情况下dst
永远不会发生这种情况,永远不会是 的子目录src
)。
现在,是否有可能FileUtils.moveDirectory(src, dst);
失败,如果是,我的文件是否会保存在 source 中?因为这是唯一的副本,我不能丢失文件。要么完全移动到,dst
要么只是失败并将我的文件留在src
.
解决方案
简短的回答:是的;即使出现问题,文件也会在src
.
在低级别,操作是复制然后删除,而不是重命名。这样,代码可以确保在任何情况下都不会在移动之前删除内容;从概念上讲,这意味着该文件可能不存在于dest
(磁盘空间不足),或者可能同时存在于src
和dest
(删除权限被拒绝),但永远不会丢失。也意味着在短时间内您将使用 2 倍的磁盘空间,因此请记住这一点。
FileUtils的源代码:见第 2881 行
推荐阅读
- pipeline - 如何在 Spinnaker 中将 base64 工件转换为 json/yaml?
- android - 通过自定义 pin 对用户进行身份验证以访问密钥库
- python - (Python) - 如何计算具有特定扩展名或名称的文件中的文件数
- python - 如何比较 Python 中的两个列表列表并找到匹配的值
- python - 用于python的vscode“没有可用的重构”
- python - 如何使用预定义的字母部分(Django python)声明一个自动递增的字母数字 id 字段
- javascript - 如何处理依赖字段验证?
- react-native - 从 React Navigation 尝试 Stack Navigator 时输入错误
- jquery - JQuery Sortable 正在扩大我的表格单元格的宽度
- python - 如何正确使用 asyncio run_coroutine_threadsafe 函数?