java普通项目读取不到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资源文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
SpringBoot整合easyExcel实现CSV格式文件的导入导出
这篇文章主要为大家详细介绍了SpringBoot整合easyExcel实现CSV格式文件的导入导出,文中的示例代码讲解详细,具有一定的参考价值,感兴趣的小伙伴可以参考下2024-02-02
SpringBoot整合Liquibase实现对数据库管理和迁移
Liquibase是一个用于用于跟踪、管理和应用数据库变化的开源工具,通过日志文件(changelog)的形式记录数据库的变更(changeset),然后执行日志文件中的修改,将数据库更新或回滚(rollback)到一致的状态,本文主要介绍SpringBoot与Liquibase的集成,需要的朋友可以参考下2024-11-11
Apache Commons Imaging处理图像实例深究
这篇文章主要为大家介绍了Apache Commons Imaging处理图像的实例探索深究,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2023-12-12
使用SpringBoot开发Restful服务实现增删改查功能
Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。这篇文章主要介绍了基于SpringBoot开发一个Restful服务,实现增删改查功能,需要的朋友可以参考下2018-01-01
Spring Boot全局异常处理机制中DispatcherServlet的处理流程和作用
本文深入解析Spring Boot全局异常处理机制,重点剖析DispatcherServlet的核心作用及其异常处理流程,详细介绍了HandlerExceptionResolver接口及其三个默认实现类的执行顺序和工作原理,通过源码分析,展示了Spring MVC如何将异常转换为响应2026-01-01
SpringBoot常用注解,thymeleaf,数据提交的实现
SpringBoot简化了微服务配置,提供快速启动和内嵌容器化web项目,常用注解包括@Component、@RestController等,Thymeleaf为前端页面渲染提供支持,数据提交时需使用@RequestBody注解2026-01-01
spring boot redis中的key失效监听的问题解决
本文主要介绍了spring boot redis中的key失效监听的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2025-07-07


最新评论