gpt4 book ai didi

java - 是否可以通过编程方式确定文件移动是否会产生副本?

转载 作者:搜寻专家 更新时间:2023-10-30 19:45:25 25 4
gpt4 key购买 nike

我的 Java 程序需要在服务器上同步移动文件,即。在同一组本地文件系统中。显而易见的解决方案是使用 Files.move() .但是,我在某些情况下读过,例如。跨文件系统,移动将回退到复制和删除。当我移动大文件时,我希望能够在复制发生时向用户报告进度(因为会有明显的延迟)。

但是,我找不到使用 Java API 执行此操作的简单方法。我可能会编写自己的复制例程来报告进度,但随后我需要知道移动是否会导致复制。

一种可能性似乎是这样的:

try {
Files.move(src, dest, CopyOption.ATOMIC_MOVE);
} catch (AtomicMoveNotSupportedException e) {
// Perform a copy instead (and report progress)
}

但是我不清楚 Java doco 是否在所有情况下都是正确的。这确实是一个正确的解决方案吗?如果不行,还有别的办法吗?

最佳答案

是的,您的解决方案很好。

尽管实际上并不是文件系统将更改移动到副本中。 原子操作在同一物理设备上发生的操作,这意味着Files.move(..,..,CopyOption.ATOMIC_MOVE)将始终成功,除非您复制到另一个驱动器,或者如果文件系统或操作系统由于某种原因不支持原子操作。这意味着您可以拥有 /dev/sda//dev/sdb,它们都具有 ext4 文件系统,并且您不能执行从一个到另一个的原子移动.

关于java - 是否可以通过编程方式确定文件移动是否会产生副本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45954566/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com