Поставщик не нашел исключение при создании файловой системы для моего почтового индекса?
Я создал Zip-файл на JimFS FileSystem
пример. Теперь я хотел бы прочитать Zip, используя Java FileSystem
API.
Вот как я создаю FileSystem
:
final FileSystem zipFs = FileSystems.newFileSystem(
source, // source is a Path tied to my JimFS FileSystem
null);
Тем не менее, это выдает ошибку:
java.nio.file.ProviderNotFoundException: поставщик не найден
Интересно, что код работает по умолчанию FileSystem
,
- Что означает эта ошибка?
- Как мне создать мой Zip
FileSystem
?
3 ответа
Это не поддерживается до JDK 12 через этот конкретный конструктор (
Path, ClassLoader
)
Это было исправлено в JDK12 с фиксацией 196c20c0d14d99cc08fae64a74c802b061231a41.
Код нарушения находился в ZipFileSystemProvider в JDK 11 и более ранних версиях:
if (path.getFileSystem() != FileSystems.getDefault()) {
throw new UnsupportedOperationException();
}
Это работает, но кажется хакерским, и что принципиально, я не уверен, почему это работает.
public static FileSystem fileSystemForZip(final Path pathToZip) {
Objects.requireNotNull(pathToZip, "pathToZip is null");
try {
return FileSystems.getFileSystem(pathToZipFile.toUri());
} catch (Exception e) {
try {
return FileSystems.getFileSystem(URI.create("jar:" + pathToZipFile.toUri()));
} catch (Exception e2) {
return FileSystems.newFileSystem(
URI.create("jar:" + pathToZipFile.toUri()),
new HashMap<>());
}
}
}
Проверьте,
source
путь указывает на файл zip-архива.
В моем случае это указывало на обычный текстовый файл, который даже имел расширение, отличное от «.zip».