0


解决java普通项目读取不到resouces目录下资源文件的办法

现象如下:

可以看到resources目录已经在idea中标记成了资源目录resources root,而且target/classes目录下也编译出了resources目录下的pci.properties文件,换句话说:java在编译时是读取到了resources下的文件的。

可是为什么new File以后做路径判断时为什么返回false,找不到文件呢?

这里需要了解java读取文件的机制:

java读取文件的两种方法:java.io和java.lang.ClassLoader

也就是一个是用java.io,另一个是用类加载器读取文件

使用java.io(File类就是基于此)默认定位到当前用户目录("user.dir")下, 而不是classpath!:

关于这一点:可以通过System.getProperty("user.dir")) 验证:

从上面的代码可以看到System.getProperty("user.dir"))和new File("") 返回的路径是一样的:

都是工程目录的工作路径,这一点从idea的配置也可以看到:

所以如果要读取classPath下的文件,一定不要不要使用File类!

此时应该使用类加载器来读取classpath下文件。

**idea环境下,默认的classPath是target/classes **

资源目录resouces下(是src/main/resources目录,且标记成了Resources Root)的文件在编译时都会自动复制到classpath下。

所以可以通过类加载器按照如下的方式读取资源目录下的文件:

${ClassLoader}.getResource("/${path}")

或者

${ClassLoader}.getResourceAsStream("/${path}")

classLoader可以通过类名.class的方式来获取

需要注意的是:getResource括号里面如果留空,则是从实际编译的路径去查找而不是classpath, 比如:

因为上面的是单元测试,此时getResource留空,则从target/test-classes开始查找

getResource括号里面如果从斜杠"/"开头,则从classpath开始查找(也就是target/class)


本文转载自: https://blog.csdn.net/jiaohuizhuang6019/article/details/130392592
版权归原作者 kingtopest 所有, 如有侵权,请联系我们删除。

“解决java普通项目读取不到resouces目录下资源文件的办法”的评论:

还没有评论