类路径读取(加载)配置文件

本文详细介绍了在Java中如何从类路径加载配置文件,包括不推荐的方式(使用点 . 代表命令运行目录)和推荐的方式(通过类路径读取)。同时,针对路径中出现空格导致的问题,文章分析了原因并提供了相应的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

加载资源文件时路径问题

案例1:       

不管是java项目还是web项目,用类路径读取配置文件通用性大,移植性好。如下:


  1. InputStream in = JdbcUtil.class.getResourceAsStream("/db.properties");
  2. properties.load(in);

案例2:


如果要是获取java项目中a.zip资源的路径字符串,也可通过方法:
  1. String attachmentFile = this.getClass().getResource("../../../a.zip").toURI().getPath();

案例3:


如果要是获取java项目中hh.png资源的路径字符串,也可通过方法:
  1. SendMail.class.getResource("hh.png").toURI().getPath();//类路径获取资源文件路径

方式1:点 . 代表java的命令运行的目录(不推荐)

在java项目下, 点 .  java命令的运行目录从项目的根目录MyEclipse工作空间/bin 目录开始

 在web项目下,点 . java命令的运行目录从tomact/bin 目录开始

 
            java项目换成web项目时,不具备通用性,所以不能用点.

方式2:使用类路径读取配置文件

/  斜杠表示classpath的根目录
在java项目下,classpath的根目录从bin目录开始

 在web项目下,classpath的根目录从WEB-INF/classes目录开始
 
正好,方式2,在java项目中和web项目中都能一致的读取到资源文件。具有通用性。但是只能是读,不能改,因为是在web项目中tomcat/项目/WEB-INF/classes,更改了内容,再发布会发生更新。
 
例如:
  1. InputStream in = JdbcUtil.class.getResourceAsStream("/db.properties");
  2. properties.load(in);

java中获取路径中的空格处理(%20)问题

       在java中获取文件路径的时候,有时候会获取到空格,但是在中文编码环境下,空格会变成“%20”从而使得路径错误。    

原因:

URL对空格,特殊字符(%,#,[]等)和中文进行了编码处理。例如:空格变为%20。 

解决办法如下:

解决方法1:使用repaceAll("%20", " ")替换后,只能解决空格问题。但是路径中包含%和中文就不行了。 
解决方法2:使用URLDecoder.decode(str,"UTF-8")解码,但是只能解决一部分,若路径中含有+,也是不能解决的,原因是URL并不是完全用URLEncoder.encode(str,"UTF-8")编码的,+号被解码后,却变成了空格。 
       
        解决方法3:可以解决所有的问题,用TestURL().class.getResource("").toURI().getPath()
  1. // String filePath = SendMail.class.getResource("hh.png").getPath();//类路径获取资源文件路径,但是路径中有空格或者中文等特殊字符会乱码,导致路径不对
  2. /**
  3. * 解决方式1:
  4. */
  5. // filePath = filePath.replace("%20", " ");//路径中的空格为20%,所以也可以用空格进行字符串替换,但是对中文乱码又无法解决
  6. /**
  7. * 解决方式2:
  8. */
  9. // String filePath = SendMail.class.getResource("hh.png").getPath();
  10. // filePath = URLDecoder.decode(filePath, "gbk");//只能解决一部分,若路径中含有+,也是不能解决的,原因是URL并不是完全用URLEncoder.encode(str,"UTF-8")编码的,+号被解码后,却变成了空格。
  11. /**
  12. * 解决方式3:(推荐)
  13. */
  14. String filePath = SendMail.class.getResource("hh.png").toURI().getPath();
  15. System.out.println(".........................." + filePath);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值