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

这篇具有很好参考价值的文章主要介绍了解决java普通项目读取不到resouces目录下资源文件的办法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

现象如下:

解决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")) 验证:

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

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

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

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

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

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

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

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

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

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

或者

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

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

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

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

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

 getResource括号里面如果从斜杠"/"开头,则从classpath开始查找(也就是target/class)文章来源地址https://www.toymoban.com/news/detail-484708.html

到了这里,关于解决java普通项目读取不到resouces目录下资源文件的办法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringBoot 读取项目中静态资源文件

    PathMatchingResourcePatternResolver是一个 Ant模式通配符 的Resource查找器,可以用来查找类路径下或者文件系统中的资源。 ❗❗❗在SpringBoot中尽量 避免使用 ResourceUtils读取资源文件。 ResourceUtils.getFile() 获取的是资源文件的绝对路径,当项目打包为jar或者war包之后部署,资源文件的绝对

    2024年02月07日
    浏览(39)
  • springboot如何访问resource目录下的文件,访问不到资源处理方法:class path resource [template.xlsx] cannot be resolved to UR

    class path resource [template.xlsx] cannot be resolved to UR ClassPathResource 可以直接访问到资源文件夹reource,但是为什么提示找不到资源呢,首先我先放出我得代码 示例代码 访问不到资源处理方法: 报错:class path resource [template.xlsx] cannot be resolved to UR 于是我检查target文件是否存在编译后

    2024年02月09日
    浏览(34)
  • SpringBoot项目打成jar包之后无法读取资源文件【jar包文件的读取方式】

    将文件放在resources目录下,确保资源文件被打包到jar包中 如何判断资源是否在jar包中,只需要解压jar包,然后查询资源名称即可 读取文件的时候写成绝对路径,肯定是不行的,这个很容易理解。 那读取文件的时候写相对路径是否可以呢?答案也是不行,见下面解释。 这是原

    2024年02月14日
    浏览(39)
  • 怎么在vscode项目里打开所在资源管理器的目录

    在VS Code中,你可以通过以下几种方法来打开项目所在的资源管理器(文件夹): 方法 1:通过侧边栏 在VS Code的侧边栏中,点击\\\"Explorer\\\"图标(通常是一个小文件夹图标)。 在\\\"Explorer\\\"面板中,右键点击你想要在资源管理器中打开的文件或文件夹。 从弹出的上下文菜单中选择

    2024年02月08日
    浏览(39)
  • Java项目导入依赖(普通java项目)

    (1)创建lib文件夹 普通项目是没有lib文件夹的,可以在项目里面手动添加一个lib文件夹,和src文件夹同级 (2)下载jar包 !!这里的下载的jar包仅是示例,选择你自己要下载的包 apache官网(慢):http://ftp.cuhk.edu.hk/pub/packages/apache.org/ maven官网(推荐):http://www.mvnrepository.

    2024年02月11日
    浏览(28)
  • IDEA项目下不显示target目录或者target目录不完整没有新添加的资源,idea隐藏target目录

    在idea-2020.1.4版本下讲解idea怎么显示或隐藏target目录。 需要知道 :如果不是maven工程,是没有target目录的,其次编译后才会生成target目录. 普通项目会生成out目录 在idea工具project旁边的空白处右键,取消勾选Show Excluded Files即可隐藏target目录 在File—settings–Editor–File Type–.gitigno

    2024年02月04日
    浏览(40)
  • OpenCV在Release模式下读取不到视频解决方法

    一、开发环境 Widnows 10 操作系统 OpenCV 4.5版本 Visual Studio 2019 IDE 二、遇到问题 我这个问题不是直接遇到的,是在我看着教程,跟着练习到中间的某一个demo的时候遇到的,然后我在网上找原因,找了一圈没有我想要的结果。 我的开发环境搭建的没问题,跑图片例程啥的都很好

    2023年04月12日
    浏览(24)
  • java读取资源路径的几种方式

    注意,以上是在Junit测试文件中的结果,工作可以精确到所在模块,而普通类里打印是只有主目录没有模块的,如下:

    2024年02月15日
    浏览(32)
  • Java实现读取SFTP服务器指定目录文件

    SFTP服务器的简介 SFTP(SSH File Transfer Protocol)是一种在安全通道上传输文件的协议,它是基于SSH(Secure Shell)协议的扩展,用于在客户端和服务器之间进行加密的文件传输。 SFTP 服务器的主要作用是提供一个安全的方式来上传、下载和管理文件。以下是一些 SFTP 服务器的主要

    2024年02月03日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包