加载资源文件时路径问题
案例1:
不管是java项目还是web项目,用类路径读取配置文件通用性大,移植性好。如下:
InputStream in = JdbcUtil.class.getResourceAsStream("/db.properties");
properties.load(in);
案例2:
如果要是获取java项目中a.zip资源的路径字符串,也可通过方法:
String attachmentFile = this.getClass().getResource("../../../a.zip").toURI().getPath();
案例3:
如果要是获取java项目中hh.png资源的路径字符串,也可通过方法:
SendMail.class.getResource("hh.png").toURI().getPath();//类路径获取资源文件路径
方式1:点 . 代表java的命令运行的目录(不推荐)
在java项目下, 点 . jav a命令的运行目录从项目的根目录MyEclipse工作空间/bin 目录开始在web项目下, 点 . java命令的运行目录从tomact/bin 目录开始
java项目换成web项目时,不具备通用性,所以不能用点.
方式2:使用类路径读取配置文件
/ 斜杠表示classpath的根目录
正好,方式2,在java项目中和web项目中都能一致的读取到资源文件。具有通用性。但是只能是读,不能改,因为是在web项目中tomcat/项目/WEB-INF/classes,更改了内容,再发布会发生更新。在java项目下,classpath的根目录从bin目录开始在web项目下, classpath 的根目录从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);