Java 9.0 | ClassLoader::getResourceAsStream:NullPointerException
下面这段代码,我从“/resource”文件夹中的文件夹中获取文件,在Java 8中运行良好:Java 9.0 | ClassLoader::getResourceAsStream:NullPointerException,java,classloader,java-9,getresource,Java,Classloader,Java 9,Getresource,下面这段代码,我从“/resource”文件夹中的文件夹中获取文件,在Java 8中运行良好: //e.g fileName = "folder0/file1.extension2" ClassLoader classLoader = ResourceLoader.class.getClassLoader(); InputStream in = classLoader.getResourceAsStream(fileName); Scanner scanner = new Scanner(in
//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(文件名)返回空值:
java.lang.NullPointerException: source
但是,如果我直接使用“/resource”文件夹中的文件,这可以正常工作:
fileName = "file0.extension1"; // It works!
我的问题很明显,老实说,有两个问题:
*.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);
现在您可以访问该文件夹
如何从其他类访问资源
InputStream
,必须调用之前创建的类(空类),如下所示:
(您的空类).class.getResourceAsStream(路径)代码>
resource
文件夹如何在您的类路径上结束?@OliverCharlesworth,/src/main/resources中的所有文件和文件夹都位于my.jar文件的根目录下。在使用Maven和JDK 9.0.1
vsJDK 1.8.0\u 121
导出可运行jar时,没有得到相同的行为,嗯,虽然很奇怪,但从eclipse导出时得到了相同的行为,注意到eclipse在jar文件中创建了一个文件夹resources.try/folder0/file1.extension2
如果jar文件确实包含更新问题中列出的资源,则调用ResourceLoader.class.getResourceAsStream(name),其中name是“/resource0.1.txt”、“/unreachableResourceFolderImTryingToAccess1/resource1.1.ext”、“jclass1.1.2.class”、“/javaFolder1/javaFolder1.1/jclass1.1.2.class”应该可以工作。如果使用“resource0.1.txt”调用ResourceLoader.class.getClassLoader().getResourceAsStream(名称),“UnreablereSourceFolderImtryingtoaccess1/resource1.1.ext”/javaFolder1/javaFolder1.1/jclass1.1.2.class”。JDK8和JDK9之间没有区别。