Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Getting FileSystemNotFoundException from ZipFileSystemProvider when creating a path to a resource

Tags:

java

maven

I have a Maven project and inside a method I want to create a path for a directory in my resources folder. This is done like this:

try {     final URI uri = getClass().getResource("/my-folder").toURI();     Path myFolderPath = Paths.get(uri); } catch (final URISyntaxException e) {     ... } 

The generated URI looks like jar:file:/C:/path/to/my/project.jar!/my-folder.

The stacktrace is as following:

Exception in thread "pool-4-thread-1" java.nio.file.FileSystemNotFoundException     at com.sun.nio.zipfs.ZipFileSystemProvider.getFileSystem(ZipFileSystemProvider.java:171)     at com.sun.nio.zipfs.ZipFileSystemProvider.getPath(ZipFileSystemProvider.java:157)     at java.nio.file.Paths.get(Paths.java:143) 

The URI seems to be valid. The part before ! points to the generated jar-file and the part after it to my-folder in the root of the archive. I have used this instructions before to create paths to my resources. Why am I getting an exception now?

like image 304
stevecross Avatar asked Jul 30 '14 09:07

stevecross


2 Answers

You need to create the file system before you can access the path within the zip like

final URI uri = getClass().getResource("/my-folder").toURI(); Map<String, String> env = new HashMap<>();  env.put("create", "true"); FileSystem zipfs = FileSystems.newFileSystem(uri, env); Path myFolderPath = Paths.get(uri); 

This is not done automatically.

See http://docs.oracle.com/javase/7/docs/technotes/guides/io/fsp/zipfilesystemprovider.html

like image 154
Uwe Allner Avatar answered Sep 18 '22 13:09

Uwe Allner


If you intend to read the resource file, you can directly use getClass.getResourceAsStream. This will set up the file system implictly. The function returns null if your resource could not be found, otherwise you directly have an input stream to parse your resource.

like image 45
user5922822 Avatar answered Sep 20 '22 13:09

user5922822