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

时间:2022-12-22 16:39:02

加载资源文件时路径问题

案例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项目下,  点 .    jav a命令的运行目录从项目的根目录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);