Java 9.0 | ClassLoader::getResourceAsStream: NullP

2019-03-18 17:05发布

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:

  1. What is going on?
  2. How can fix that?

Here is my project structure:

enter image description here

*.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
- ..

1条回答
我只想做你的唯一
2楼-- · 2019-03-18 18:01

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:

exports resources_module;
opens resources;
opens resources.(the name of another folder inside the package);

And now you can access to that folder.

HOW TO ACCESS TO RESOURCES FROM ANOTHER CLASS

  1. Inside the package "resources_module" create a empty class
  2. 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);

查看更多
登录 后发表回答