Чтобы отобразить содержимое файла определенного каталога в пути к классам, я использую новые функции FileSystem
и Path
Java 7. В одном развертывании каталог хранится в файловой системе напрямую. В другом развертывании он сохраняется в файле JAR.Чтение из файловой системы через объект FileSystem
Мой подход хорошо работает с файлами JAR: создаю объект FileSystem
, который ссылается на файл JAR и получает доступ к содержимому через объект 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))
{
...
Благодаря объекта дир имеет следующие значения, он работает:
jar:file:/C:/Users/pax/.../Detector-1.0.jar!/org/.../destinationdir
Но в другой среде каталог назначения хранится в файловой системе, непосредственно. Объект реж содержит значение:
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-файла)?