小编Pt.*_*erk的帖子

如何使用 Java 的 IO 读取 Windows NTFS 的备用数据流?

我试图让我的 Java 应用程序读取给定路径中的所有数据。文件、目录、元数据等。这还包括 NTFS 称为备用数据流 (ADS) 的一个奇怪的东西。

显然,它就像目录或文件中的第二层数据。您可以打开命令提示符并使用“:”在ADS中创建文件,例如:

C:\ADSTest> echo test>:ads.txt
Run Code Online (Sandbox Code Playgroud)

所以,

C:\ADSTest> notepad :ads.txt
Run Code Online (Sandbox Code Playgroud)

应该打开一个记事本,其中包含字符串“test”。但是,如果您这样做:

C:\ADSTest> dir
Run Code Online (Sandbox Code Playgroud)

您将无法看到 ads.txt。但是,如果您使用显示 ADS 数据的 dir 选项,您将能够看到它:

C:\ADSTest> dir /r
MM/dd/yyyy hh:mm            .:ads.txt
Run Code Online (Sandbox Code Playgroud)

现在,我知道Java IO具有读取ADS的能力。我怎么知道呢?嗯,Oracle 的文档明确指出了这一点

如果文件系统实现支持的文件属性不足以满足您的需求,您可以使用 UserDefinedAttributeView 创建和跟踪您自己的文件属性。

一些实现将此概念映射到 NTFS 替代数据流等功能以及文件系统(如 ext3 和 ZFS)上的扩展属性。

另外,随机论坛上的随机帖子:D

数据存储在 NTFS 备用数据流 (ADS) 中,可通过 Java IO 读取(我已经测试过)。

问题是,我找不到任何可以解析ADS的预先编写的文件属性查看器,而且我不明白如何编写自己的ADS解析器。我是一名初学者程序员,所以我觉得这超出了我的能力范围。有人可以帮助我或指出我正确的方向吗?

解决方案

编辑:在@knosrtum的帮助下,我能够编写一种方法,该方法将从给定路径返回所有已解析的ADS信息作为字符串ArrayList(它也可以轻松编辑为文件ArrayList)。以下是任何可能需要它的人的代码:

public class ADSReader {

    public static ArrayList<String> start(Path toParse) {

        String path = toParse.toString();
        ArrayList<String> parsedADS = new ArrayList<>();

        final String command …
Run Code Online (Sandbox Code Playgroud)

java io ntfs java-io alternate-data-stream

6
推荐指数
1
解决办法
4854
查看次数

标签 统计

alternate-data-stream ×1

io ×1

java ×1

java-io ×1

ntfs ×1