gpt4 book ai didi

java - 使用 Java 通过 inode 查找文件

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:26:26 34 4
gpt4 key购买 nike

我正在开发处理文件的软件,我需要能够找到一个文件,无论它是否已被移动、重命名等。是否有某种方法可以通过 Java 搜索其 inode 来实现?

最佳答案

这有两个部分:为您已知的文件获取 inode ,然后找到具有该 inode 的文件。

有一种机制可以实现前者,但不能保证。

import java.nio.file.Files;
import java.io.IOException;

// ...

private static OptionalLong findInode(File file)
throws IOException /* , SecurityException */ {

try {
Long inode = Files.getAttribute(file.toPath(), "unix:ino");
return inode != null ? OptionalLong.of(inode) : OptionalLong.empty();
}
catch (UnsupportedOperationException | IllegalArgumentException e) {
// getting an inode is unsupported for this JVM or that filesystem
return OptionalLong.empty();
}
}

至于稍后根据该 inode 找到文件,那是不可能的。 native 文件系统 API 可能会或可能不会提供一种快速的方法来首先做到这一点,我不知道。我怀疑不是,这就是为什么一般的命令行解决方案使用 find 命令。

这就是您进入该方法的一些特别脆弱的方面的地方。正如 Zaboj Campula 提到的,您不能保证“移动”或“重命名”操作是以保留原始 inode 的方式执行的。

如果是,理论上您可以通过递归原始路径的 FileSystem 并使用上述方法检查每个文件的 inode,从而在 Java 中重现 find 的功能。但即使这样做,您也不能保证能够递归地找到它们。例如,文件可能已移至您无权访问的目录中。您还必须准备好多个路径可能共享相同 inode。由于这个问题是基于文件在后台四处移动的可能性,所以在您的递归下降期间,总是有可能发生这种情况,并将其移动到您已经搜索过的地方.

因此,只要您做好准备,这不是一个 100% 可靠的过程,上述内容可能会让您到达目的地。

关于java - 使用 Java 通过 inode 查找文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46474792/

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