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资源文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java自带的四种线程池实例详解

    java自带的四种线程池实例详解

    java线程的创建非常昂贵,需要JVM和OS(操作系统)互相配合完成大量的工作,下面这篇文章主要给大家介绍了关于java自带的四种线程池的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2022-04-04
  • 深入理解Java main方法详解

    深入理解Java main方法详解

    这篇文章主要为大家介绍了Java main方法详解,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-11-11
  • SpringMVC中利用@InitBinder来对页面数据进行解析绑定的方法

    SpringMVC中利用@InitBinder来对页面数据进行解析绑定的方法

    本篇文章主要介绍了SpringMVC中利用@InitBinder来对页面数据进行解析绑定的方法,非常具有实用价值,需要的朋友可以参考下
    2018-03-03
  • java基于jdbc实现简单学生管理系统

    java基于jdbc实现简单学生管理系统

    本文主要主要介绍了java连接mysql数据库的一个简单学生系统,通过jdbc连接数据库。文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • javaweb图书商城设计之购物车模块(3)

    javaweb图书商城设计之购物车模块(3)

    这篇文章主要为大家详细介绍了javaweb图书商城设计之购物车模块的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • 使用Mybatis如何实现删除多个数据

    使用Mybatis如何实现删除多个数据

    这篇文章主要介绍了使用Mybatis如何实现删除多个数据,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • Java使用fastjson对String、JSONObject、JSONArray相互转换

    Java使用fastjson对String、JSONObject、JSONArray相互转换

    这篇文章主要介绍了Java使用fastjson对String、JSONObject、JSONArray相互转换,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • Java运行时环境之ClassLoader类加载机制详解

    Java运行时环境之ClassLoader类加载机制详解

    这篇文章主要给大家介绍了关于Java运行时环境之ClassLoader类加载机制的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-01-01
  • 深入理解Spring Boot中的Flyway

    深入理解Spring Boot中的Flyway

    Flyway将数据库结构的变更定义为一系列迁移脚本,通常是SQL脚本文件,当应用程序启动时,Flyway会自动检测并执行未应用的迁移脚本,将数据库升级到最新版本,这篇文章主要介绍了深入理解Spring Boot中的Flyway,需要的朋友可以参考下
    2024-01-01
  • Java之System.getProperty()的作用及使用说明

    Java之System.getProperty()的作用及使用说明

    这篇文章主要介绍了Java之System.getProperty()的作用及使用说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04

最新评论