properties读取,乱码相关问题解决过程

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/cc_xp/article/details/78396823

properties读取,乱码相关问题解决过程

1. 问题描述

采用相对路径读取properties文件,报异常文件未找到,采用绝对路径,可以正常读取

Properties pro = new Properties();
FileInputStream in = new FileInputStream("inittable.properties");
pro.load(in);

2. 原因分析

idea文件目录结构:
这里写图片描述
Tomcat打包后的目录结构:
这里写图片描述
打包前后相对路径会有差异,采用1中写法会导致无法找文件

3. 相对路径与绝对路径

  • 绝对路径:绝对路径就是你的主页上的文件或目录在硬盘上真正的路径,(URL和物理路径)例如:C:\xyz\test.txt代表了test.txt文件的绝对路径。http://www.sun.com/index.htm也代表了一个URL绝对路径。

  • 相对路径:相对与某个基准目录的路径。包含Web的相对路径(HTML中的相对目录),例如:在Servlet中,”/”代表Web应用的根目录。和物理路径的相对表示,例如:”./” 代表当前目录,”../”代表上级目录。这种类似的表示,也是属于相对路径。

默认情况下new File(“/”)代表的目录为:System.getProperty(“user.dir”),在tomcat中,在类中输出System.getProperty(“user.dir”);显示的是%Tomcat_Home%/bin,因此解决该问题的写法为:

Properties pro = new Properties();
prop.load(this.getClass().getResourceAsStream("/inittable.properties"));

getResourceAsStream/getResource均可读取到该文件,可以正确读取到该文件

4. 其他相关路径含义

  • 服务器端地址:服务器端的相对地址指的是相对于你的web应用的地址,这个地址是在服务器端解析的(不同于html和javascript中的相对地址,他们是由客户端浏览器解析的)也就是说这时候在jsp和servlet中的相对地址应该是相对于你的web应用,即相对于http://127.0.0.1/webapp/的。
  • 客户端的地址:所有的html页面中的相对地址都是相对于服务器根目录(http://127.0.0.1/)的,而不是(根目录下的该Web应用的目录)http://127.0.0.1/webapp/的。

5. 读取properties中文乱码解决方法

properties默认编码为GBK编码,输入中文会出现乱码问题。解决方法:
1. 设置idea的默认properties文件编码为utf-8编码
这里写图片描述

  1. 读取文件时采用如下方式,指定文件类型:
 Properties initTable = new Properties();
 initTable.load(new InputStreamReader(this.getClass().getResourceAsStream("/inittable.properties"),"utf-8")); 

6. 参考资料

http://www.cnblogs.com/leehongee/p/3324062.html
http://blog.csdn.net/suyu_yuan/article/details/52733418

猜你喜欢

转载自blog.csdn.net/cc_xp/article/details/78396823
今日推荐