问题标签 [jsr203]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
8277 浏览

java - 使用 JIMFS 创建虚拟文件系统

我想使用 Google 的 JIMFS 来创建一个用于测试目的的虚拟文件系统。不过,我很难开始。

我看了这个教程:http ://www.hascode.com/2015/03/creating-in-memory-file-systems-with-googles-jimfs/

但是,当我创建文件系统时,它实际上是在现有文件系统中创建的,即我不能这样做:

因为我被拒绝访问。

我错过了什么吗?

目前,我的代码如下所示:

测试类:

某处的Java类:

但是,我创建了一个单独的类来测试 JIMFS,这里目录的创建没有失败,但是我不能像这样创建一个新文件:

我究竟做错了什么?

0 投票
1 回答
1379 浏览

java - 如何为 zip 存档编写 FileTypeDetector?

对于这个包,我接下来的一个步骤是编写一系列FileTypeDetector让该方法Files.probeContentType()比默认情况下更智能(默认提供的文件类型检测器仅依赖于“文件扩展名”)。

正如上述方法的 javadoc 所提到的,该方法依赖于在文件FileTypeDetector中声明的 s实例。META-INF/services

我首先使用一个简单的提供程序进行了测试,以使用文件头检测 PNG 文件:

有用。现在,在快速浏览 API 之后,我认为这是检测文件是否为 zip 文件的好方法:

的内容META-INF/services/java.nio.file.spi.FileTypeDetector是这样的:

通过当前的测试,它起作用了;对于 zip,我创建了一个空的 zip 文件,对于 PNG 测试,我使用了这个图像

全面测试:

然而...

如果我反转服务文件中的实现列表,那么现在的文件是:

然后 PNG 文件被检测为 zip 文件!

经过一些调试后,我注意到:

  • 打开PNGZipInputStream并没有失败......
  • ...并.getNextEntry()返回null!

我预计至少 .getNextEntry()会抛出ZipException.

为什么没有呢?如何可靠地检测文件是否为 zip?

进一步说明:这是针对Paths; 因此任何东西File都是不可用的。

0 投票
1 回答
1424 浏览

java - 使用 FileSystemProvider 实现 FTP 文件系统

我开发了一个应用程序,它使用 Java 检测文件系统中的变化java.nio.file.WatchService

这在为默认文件系统设置 WatchService 时非常有用:

watchService = FileSystems.getDefault().newWatchService();

我现在的用例是扩展这个应用程序来监控远程 ftp 服务器上的事件。具体来说,当检测到新文件 (ENTRY_CREATE) 事件时,获取文件然后处理它。

研究这个我相信这是方法:

  1. 根据NIO.2 文档实现自定义 FTP FileSystemProvider
  2. 为自定义 FTP FileSystemProvider 实现 WatchService 实现

总的来说,这种方法看起来对吗?

其次,任何指向教程或实现的链接都会非常有帮助。

谢谢!

0 投票
1 回答
38 浏览

java - 表示在 Windows 下以 `\` 开头但没有磁盘驱动器的 `Path`

我没有 Windows 副本,但想知道在 Java 中表示路径的行为和推荐用法,例如\autoexec.bat在 Windows 下?

从语义上讲,这样的路径将代表autoexec.bat任何文件系统根目录上的文件。C:\因此,在表示文件之前,需要根据表示磁盘驱动器的路径(例如 )来解析它。从这个意义上说,它不是绝对的。但是,我想它也没有根组件。

在 Windows 上运行 JVM 时可以创建这样的路径吗?如果是这样,会getRoot()返回isAbsolute()什么?

我使用Memory File System尝试了以下代码,但这会抛出InvalidPathException:“path must not start with separator at index 1: \truc”。这是否忠实地反映了 Windows 下的行为,还是这个特定库的怪癖?

这样的路径在 Windows 终端中是有效的,或者至少是我上次使用 Windows 时(很久以前)。创建这样的路径以标记路径是“绝对的”会很方便(从反斜杠开始的意义上说,因此与文件夹无关),但仍然保留没有指定驱动程序字母的路径。然后可以(稍后)将这样的路径解析为C:\autoexec.bator D:\autoexec.bator ...</p>

0 投票
0 回答
31 浏览

java - 对于 Git 文件系统层来说,具有根每次提交的单个 JSR203 存储是否是合理的设计?

我想实现一个 jsr203 文件系统来访问 git 历史记录。因此,创建一个表示特定提交中的文件的路径,通过让文件系统访问.git封面下的文件夹并读取历史记录来检索其内容,等等。

我考虑过使用该jgit库来读取文件,并使用Path(主要)委托给默认文件系统实现的Path实现。一个重要的区别是Path将包含用户感兴趣的提交标识符。

我将只有一个文件存储,但有多个根:每个提交一个。

这种设计有意义吗?是否有我可能遇到的隐藏困难?在开始之前还有更多的计划吗?