【问题标题】:Found reliance on default encoding: new java.io.FileWriter(File, boolean)发现依赖默认编码:new java.io.FileWriter(File, boolean)
【发布时间】:2018-07-13 07:19:00
【问题描述】:

我正在使用 FileWrite 类写入文件。它工作正常。但是 FindBugs 在我的代码 sn-p 中指出了一个小问题。

代码 sn-p:

  SimpleDateFormat formatter = new SimpleDateFormat("yyyy_MM_dd");
        Date now = new Date();
        String fileName = formatter.format(now) + ".txt";
        FileWriter writer = null;
        try {
            File root = new File(Environment.getExternalStorageDirectory(), "Test");
            if (!root.exists()) {
                root.mkdirs();
            }
            File gpxfile = new File(root, fileName);

            writer = new FileWriter(gpxfile, true);
            writer.append(text + "\n\n");

        } catch (IOException e) {
            e.printStackTrace();

        } finally {
            if (writer != null) {
                try {
                    writer.flush();
                    writer.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

查找错误报告:

依赖默认编码 发现依赖默认编码:new java.io.FileWriter(File, boolean)

我在哪一行收到此错误?

  writer = new FileWriter(gpxfile, true);

有人可以简要介绍一下这到底是什么吗? 我们该如何解决这个问题?

【问题讨论】:

    标签: android character-encoding findbugs spotbugs


    【解决方案1】:

    通过替换解决了这个问题

    FileWriter writer = new FileWriter(gpxfile, true);
    

      FileOutputStream fileStream = new FileOutputStream(gpxfile);
                writer = new OutputStreamWriter(fileStream, "UTF-8");
    

    【讨论】:

      【解决方案2】:
      File file = new File(someFilePath);
      Writer w = new OutputStreamWriter(new FileOutputStream(file), "UTF-8");
      PrintWriter pw = new PrintWriter(w);
      pw.println(someContent);
      pw.close();
      

      【讨论】:

      • 欢迎来到 StackOverflow。您能否在答案中添加一些其他详细信息?尽管某些仅代码的答案是可以接受的,但最好为将来阅读此内容的人添加解释。
      【解决方案3】:
      import java.io.BufferedWriter;
      import java.io.File;
      import java.nio.charset.Charset;
      import java.nio.file.Files;
      
      Charset charSet = Charset.forName("UTF-8");
      File file = new File(someFilePath);
      BufferedWriter bufferedWriter = Files.newBufferedWriter(file.toPath(), charSet);
      bufferedWriter.write(header);
      bufferedWriter.close();
      

      【讨论】:

        猜你喜欢
        • 2012-05-08
        • 1970-01-01
        • 2015-07-08
        • 1970-01-01
        • 2011-08-19
        • 1970-01-01
        • 2011-09-07
        • 1970-01-01
        相关资源
        最近更新 更多