【问题标题】:SonarQube issue with New FileReader新 FileReader 的 SonarQube 问题
【发布时间】:2019-05-21 15:47:02
【问题描述】:

下面提到的代码 sn-p 使用以下 squid 规则给出 Sonar 注释:squid:S1943

  try(BufferedReader reader = new BufferedReader(**new
    FileReader**(properties.get(FILE_BASED_CONFIGURATION).toString())))
        {
             //some code
        }
 catch (IOException | ArrayIndexOutOfBoundsException e)
        {
            LOG.error("Exception while reading from File", e);
            //customerInfo.clear();
        }

[SONAR] MAJOR:删除构造函数“FileReader(String)”的这种使用

【问题讨论】:

    标签: java sonarqube sonarlint


    【解决方案1】:

    这是由于 FileReader 使用了默认系统编码,这通常很糟糕。你应该使用

    try(BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(properties.get(FILE_BASED_CONFIGURATION).toString())), encoding)))
        {
             //some code
        }
     catch (IOException | ArrayIndexOutOfBoundsException e)
        {
            LOG.error("Exception while reading from File", e);
            //customerInfo.clear();
        }
    

    【讨论】:

      【解决方案2】:

      这里的问题是您没有为文件指定编码,这意味着将使用系统的默认编码读取文件。这意味着代码的行为可能因系统而异。

      您应该明确说明文件的编码,例如,

      new InputStreamReader(
         new FileInputStream(
           properties.get(FILE_BASED_CONFIGURATION).toString()), "UTF-8")
      

      这会使用FileInputStream(从文件中读取字节)读取文件,然后将其包装在InputStreamReader 中,该InputStreamReader 使用指定的编码将这些字节转换为字符。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-29
        • 1970-01-01
        • 1970-01-01
        • 2016-12-14
        • 1970-01-01
        • 2010-10-16
        相关资源
        最近更新 更多