java指定文件编码格式
在创建文件并打印字符串时,如果不指定编码,默认是按系统的编码格式来。比如我们的linux环境中编码如下:
[root@wlf ~]# locale LANG=en_US.UTF-8 LC_CTYPE="zh_CN.GBK" LC_NUMERIC="zh_CN.GBK" LC_TIME="zh_CN.GBK" LC_COLLATE="zh_CN.GBK" LC_MONETARY="zh_CN.GBK" LC_MESSAGES="zh_CN.GBK" LC_PAPER="zh_CN.GBK" LC_NAME="zh_CN.GBK" LC_ADDRESS="zh_CN.GBK" LC_TELEPHONE="zh_CN.GBK" LC_MEASUREMENT="zh_CN.GBK" LC_IDENTIFICATION="zh_CN.GBK" LC_ALL=zh_CN.GBK
中文编码看LC_ALL,这里我们环境配置的是GBK,那么如下代码就是使用GBK来的,因为这里并未设置默认编码格式:
protected void writerLog(String content)
{
// 记录创建时间为当前时间
createDate = new Date();
try
{
// 生成文件对象,如果文件不存在,要创建新文件。
File file = new File(this.fileName);
if (!file.exists() && file.createNewFile())
{
// 上面方法有返回值,findBugs会报警,所以采用空实现的形式解决
;
}
// 获得当前文件大小
this.fileSize = file.length();
file = null;
// 打开输出
this.logWriter = new PrintWriter(new FileWriter(this.fileName, true), true);
}
catch (IOException e)
{
e.printStackTrace();
this.logWriter = null;
}
this.logWriter.print(content);
this.logWriter.flush();
}
如何指定具体的编码格式呢?我们把这一行改下:
this.logWriter = new PrintWriter(new FileWriter(this.fileName, true), true);
使用OutputStreamWriter对象来指定UTF-8编码:
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(this.fileName, true), "UTF-8");
this.logWriter = new PrintWriter(osw, true);
浙公网安备 33010602011771号