java指定文件编码格式

  在创建文件并打印字符串时,如果不指定编码,默认是按系统的编码格式来。比如我们的linux环境中编码如下:

CMREAD-SV43 /home/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);
原文地址:https://www.cnblogs.com/wuxun1997/p/10103302.html