This piece of code down below, where I take my file from folder which is inside the "/resource" folder, works fine for me in Java 8:
//e.g fileName = "folder0/file1.extension2"
ClassLoader classLoader = ResourceLoader.class.getClassLoader();
InputStream in = classLoader.getResourceAsStream(fileName);
Scanner scanner = new Scanner(in, "UTF-8");
In Java 9 it does not, classLoader.getResourceAsStream(fileName) returns null:
java.lang.NullPointerException: source
However, if I use files straight from "/resource" folder, this works fine:
fileName = "file0.extension1"; // It works!
My question is quite obvious, to be honest, there are two of them:
- What is going on?
- How can fix that?
Here is my project structure:
*.jar output structure:
*.jar:
- javaFolder1
-javaFolder1.1
-ResourceLoader.class
-jclass1.1.2.class
-jclass1.1.3.class
-javaFolder1.2
- javaFolder2
- ..
- ..
- unreachableResourceFolderImTryingToAccess1
-resource1.1.ext
-resource1.2.ext
- unreachableResourceFolderImTryingToAccess2
- ..
- unreachableResourceFolderImTryingToAccess3
- ..
-resource0.1.ext
-resource0.2.ext
- ..
- somedll1.dll
- somedll2.dll
- ..
In the module_info.java file, you have to open the files, for example, the package name, in which you have the files is "resources" and, if that package is inside another called "resources_module" the code will be:
And now you can access to that folder.
HOW TO ACCESS TO RESOURCES FROM ANOTHER CLASS
From another class (including other modules), to get an
InputStream
you have to call the class you created before (the empty class) like this:(Your empty class).class.getResourceAsStream(path);