【发布时间】:2014-07-22 22:35:49
【问题描述】:
为了在类路径上列出特定目录的文件内容,我使用了 Java 7 的新 FileSystem 和 Path 功能。在一个部署中,目录直接存储在文件系统中。在另一个部署中,它被存储在一个 JAR 文件中。
我的方法适用于 JAR 文件:我创建了一个引用 JAR 文件的 FileSystem 对象并通过 Path 对象访问内容。
...
URI dir = ...
String[] array = dir.toString().split("!");
try (final FileSystem fs = FileSystems.newFileSystem(URI.create(array[0]), new HashMap<String, Object>()))
{
final Path directory = fs.getPath(array[1]);
try (DirectoryStream<Path> directoryStream = Files.newDirectoryStream(directory))
{
...
由于 dir 对象具有以下值,它可以工作:
jar:file:/C:/Users/pax/.../Detector-1.0.jar!/org/.../destinationdir
但在其他环境中,目标目录直接存储在文件系统中。 dir 对象包含值:
file:/C:/Users/pax/.../destinationdir
FileSystems.newFileSystem(...) 总是为 / 和 file:/C:/Users/pax/.../destinationdir 抛出以下异常作为 URI:
java.lang.IllegalArgumentException: Path component should be '/'
at sun.nio.fs.WindowsFileSystemProvider.checkUri(WindowsFileSystemProvider.java:68)
如何将FileSystem.newFileSystem 用于文件系统上的目标?
是否有更好的方法可以独立于特定类型的存储(文件系统或 JAR 文件)列出目录内容?
【问题讨论】:
标签: java jar path directory filesystems