首页 > 其他分享 >类路径读取(加载)配置文件

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

时间:2022-12-28 14:05:22浏览次数:33  
标签:getResource java 读取 配置文件 filePath 路径 空格 class 加载


加载资源文件时路径问题


案例1:       



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



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


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


案例2:




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



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

案例3:



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



如果要是获取java项目中hh.png资源的路径字符串,也可通过方法:

​​SendMail.class.getResource("hh.png").toURI().getPath();//类路径获取资源文件路径​​

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



点 .    jav a命令的运行目录从项目的根目录MyEclipse工作空间/bin 目录开始


类路径读取(加载)配置文件_web项目_04

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

类路径读取(加载)配置文件_java项目_05


 



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


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


/  斜杠表示classpath的根目录



在java项目下,classpath的根目录从bin目录开始


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

在web项目下, classpath 的根目录从WEB - INF/classes目录开始


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

 


正好,方式2,在java项目中和web项目中都能一致的读取到资源文件。具有通用性。但是只能是读,不能改,因为是在web项目中tomcat/项目/WEB-INF/classes,更改了内容,再发布会发生更新。

 


例如:

​​InputStream in = JdbcUtil.class.getResourceAsStream("/db.properties");​​​​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()

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

标签:getResource,java,读取,配置文件,filePath,路径,空格,class,加载
From: https://blog.51cto.com/u_15769923/5974352

相关文章