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

 更新时间:2023年09月04日 09:11:50   作者:kingtopest  
这篇文章主要给大家介绍了关于java普通项目读取不到resources目录下资源文件的解决办法,Web项目中应该经常有这样的需求,在maven项目的resources目录下放一些文件,比如一些配置文件,资源文件等,需要的朋友可以参考下

现象如下:

 可以看到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)

总结

到此这篇关于java普通项目读取不到resouces目录下资源文件的解决办法的文章就介绍到这了,更多相关java读取不到resouces资源文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Mybatis 批量更新实体对象方式

    Mybatis 批量更新实体对象方式

    这篇文章主要介绍了Mybatis 批量更新实体对象方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • Java成员变量与局部变量(动力节点Java学院整理)

    Java成员变量与局部变量(动力节点Java学院整理)

    这篇文章主要介绍了Java成员变量与局部变量的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-04-04
  • springboot项目mysql-connector-java默认版本如何查看

    springboot项目mysql-connector-java默认版本如何查看

    这篇文章主要介绍了springboot项目mysql-connector-java默认版本如何查看问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • JDK的下载、安装与部署图文教程

    JDK的下载、安装与部署图文教程

    这篇文章主要为大家详细介绍了JDK的下载、安装与部署图文教程,感兴趣的小伙伴们可以参考一下
    2016-06-06
  • Java深入了解数据结构之优先级队列(堆)

    Java深入了解数据结构之优先级队列(堆)

    普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。在优先队列中,元素被赋予优先级。当访问元素时,具有最高优先级的元素最先删除。优先队列具有最高级先出 (first in, largest out)的行为特征。通常采用堆数据结构来实现
    2022-01-01
  • java命令打jar包详细步骤示例讲解

    java命令打jar包详细步骤示例讲解

    对于如何将一个java文件通过命令形式进行打包,通过以下示例进行讲解,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2023-12-12
  • Java加密 消息摘要算法SHA实现详解

    Java加密 消息摘要算法SHA实现详解

    这篇文章主要介绍了Java加密 消息摘要算法SHA实现详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • SpringBoot使用@ResponseBody返回图片的实现

    SpringBoot使用@ResponseBody返回图片的实现

    这篇文章主要介绍了SpringBoot使用@ResponseBody返回图片的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • SpringBoot中的多个事务管理详解

    SpringBoot中的多个事务管理详解

    这篇文章主要介绍了SpringBoot中的多个事务管理详解,事务管理是一种组织和协调各种活动和资源的方法,以实现特定目标,它涉及规划、执行和监控各种任务,以确保项目或组织的顺利运行,需要的朋友可以参考下
    2023-10-10
  • Java数组添加元素的两种方法

    Java数组添加元素的两种方法

    这篇文章主要介绍了Java数组添加元素的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友跟着小编来一起学习学习吧
    2023-04-04

最新评论