java 打包成jar(可运行)方法以及UTF-8编码乱码等问题解决
打包成可直接运行的Jar(包含lib库),如果附带还有data等数据文件,需要手动创建一下。
编码问题:在eclipse调试时没问题,但是打包成jar就乱码了,。java文件都是utf-8,所用的数据文件也是utf-8,文件读取没问题,就是显示出现问题:
可写一个启动bat,将start.bat改为java -jar -Dfile.encoding=utf-8 YourName.jar,问题就可以轻松解决。
如果还未解决,请修改cmd程序的编码注册表信息:
对于编译出的程序,在 cmd 和 power shell 运行时都不能正确显示汉字。
网上查,可以再命令窗口修改:
1、打开CMD.exe命令行窗口
2、通过 chcp命令改变代码页,UTF-8的代码页为65001
chcp 65001
执行该操作后,代码页就被变成UTF-8了。
在当前窗口的确可以解决问题,但是重新打开的cmd窗口或者power shell 窗口仍然不能正确显示汉字。
最终发现,cmd的属性设置可以在注册表中修改,实现一次修改永远有效:
1. win+R 输入regedit 进入注册表
2. 找到 HKEY_CURRENT_USER\Console\%SystemRoot%_system32_cmd.exe 如果 该项下已存在CodePage项,则把值改为十进制”65001”;如果不存在,在该项下新建一个 DWORD(32位值),命名为“CodePage”,值设为“65001”
3. 重启cmd后生效
4. 对于Power shell修改同样,只需在第2步修改
%SystemRoot%_system32_WindowsPowerShell_v1.0_powershell.exe 下的项。
jar读取txt文件乱码问题:
Java代码
- BufferedReader read = new BufferedReader(new FileReader(new File(filename)));
解决办法:
- InputStreamReader isr = new InputStreamReader(new FileInputStream(file), "UTF-8");
- BufferedReader read = new BufferedReader(isr);
因为InputStreamReader和BufferedReader 都继承自Reader,而BufferedReader 的构造器又是Reader.
Writer也是一样的处理
Java代码
- FileOutputStream writerStream = new FileOutputStream(filePath, true);
- BufferedWriter oWriter = new BufferedWriter(new OutputStreamWriter(writerStream, "UTF-8"));