为了列出类路径上特定目录的文件内容,我正在使用新的FileSystem
and Path
Java 7 的功能。在一次部署中,目录直接存储在文件系统上。在另一个部署中,它存储在 JAR 文件中。
我的方法适用于 JAR 文件:我创建了一个FileSystem
引用 JAR 文件并通过以下方式访问内容的对象Path
object.
...
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(...)
总是抛出以下异常/
and file:/C:/Users/pax/.../destinationdir
as URI:
java.lang.IllegalArgumentException: Path component should be '/'
at sun.nio.fs.WindowsFileSystemProvider.checkUri(WindowsFileSystemProvider.java:68)
你如何使用FileSystem.newFileSystem
文件系统上的目的地?
是否有更好的方法来独立于其特定类型的存储(文件系统或 JAR 文件)列出目录内容?