voi*_*ger 10 java classloader getresource java-9
下面的这段代码,我从" / 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");
Run Code Online (Sandbox Code Playgroud)
在Java 9中没有,classLoader.getResourceAsStream(fileName)返回null:
java.lang.NullPointerException: source
Run Code Online (Sandbox Code Playgroud)
但是,如果我直接使用" / resource "文件夹中的文件,这可以正常工作:
fileName = "file0.extension1"; // It works!
Run Code Online (Sandbox Code Playgroud)
我的问题很明显,说实话,有两个:
这是我的项目结构:
*.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
- ..
Run Code Online (Sandbox Code Playgroud)
在 module_info.java 文件中,您必须打开文件,例如,包含文件的包名称是“resources”,如果该包位于另一个名为“resources_module”的包内,则代码将是:
exports resources_module;
opens resources;
opens resources.(the name of another folder inside the package);
Run Code Online (Sandbox Code Playgroud)
现在您可以访问该文件夹。
如何访问其他班级的资源
从另一个类(包括其他模块),要获得一个InputStream你必须像这样调用你之前创建的类(空类):
(Your empty class).class.getResourceAsStream(path);
| 归档时间: |
|
| 查看次数: |
1404 次 |
| 最近记录: |