我有一个具有此结构的基于gradle的java项目
.
├── myproject
│ ├── src
│ | └── main
│ | ├── java
│ | └── resources
│ | └── myresource.xml
| ├── build
| | ├── classes
| | | └── main
│ | | └── myresource.xml
| | ├── resources
我尝试使用ClassLoader访问 resources 文件夹中的某些文件,如下所示
ClassLoader.getSystemClassLoader().getResoure("/myresource.xml");
但它找不到该文件。
我发现访问这些文件的唯一方法是探索项目的已知结构
Path resourcesPath= FileSystems.getDefault().getPath(System.getProperty("user.dir"), "/src/main/resources/");
关于我做错了什么的任何想法?
答案 0 :(得分:14)
好吧,似乎我的困难来自另一个问题(资源没有被复制到适当的地方)。一旦我解决了这个问题,ClassLoader就能够使用以下两种形式之一找到我的资源:
ClassLoader.getSystemClassLoader().getResource("./myresource.xml");
ClassLoader.getSystemClassLoader().getResource("myresource.xml");
答案 1 :(得分:2)
http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html#getResource(java.lang.String)
例如类似MyMain.class.getResource("/config.txt")
或适当时使用相对路径。
答案 2 :(得分:0)
也许您应该这样使用它:
Thread.currentThread().getContextClassLoader().getResource("myresource.xml")
如果我使用ClassLoader.getSystemClassLoader().getResource("myresource.xml")
当我将其用作嵌入其他应用程序的jar包时,我仍然无法访问资源。