下面这段代码,我从“/resource”文件夹中的文件夹中获取我的文件,在 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");
在 Java 9 中它不会,classLoader.getResourceAsStream(fileName) 返回 null:
java.lang.NullPointerException: source
但是,如果我直接使用“/resource”文件夹中的文件,则效果很好:
fileName = "file0.extension1"; // It works!
我的问题很明显,老实说,有两个问题:
- 发生了什么事?
- 如何解决?
这是我的项目结构:
*.jar输出结构:
*.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
- ..
最佳答案
在 module_info.java 文件中,您必须打开文件,例如,您拥有文件的包名称是“resources”,如果该包位于另一个名为“resources_module”的包中,代码将是:
exports resources_module;
opens resources;
opens resources.(the name of another folder inside the package);
现在您可以访问该文件夹了。
如何访问其他类(class)的资源
- 在包“resources_module”中创建一个空类
要从另一个类(包括其他模块)获取
InputStream
,您必须像这样调用之前创建的类(空类):(你的空类).class.getResourceAsStream(path);
关于Java 9.0 |类加载器::getResourceAsStream: NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47613602/