Java 新文件读取器可能会出现问题
下面提到的代码片段使用以下squid规则给出Sonar注释:Java 新文件读取器可能会出现问题,java,sonarqube,sonarlint,Java,Sonarqube,Sonarlint,下面提到的代码片段使用以下squid规则给出Sonar注释: [SONAR]主要:删除构造函数“FileReader(String)”的这种用法。这是因为FileReader使用默认系统编码,这通常是不好的。你应该使用 try(BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(properties.get(FILE_BASED_CONFIGURATION).toString()
[SONAR]主要:删除构造函数“FileReader(String)”的这种用法。这是因为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();
}
这里的问题是您没有为文件指定编码,这意味着将使用系统的默认编码读取文件。这意味着代码的行为可能因系统而异 您应该明确说明文件的编码,例如
new InputStreamReader(
new FileInputStream(
properties.get(FILE_BASED_CONFIGURATION).toString()), "UTF-8")
这将使用FileInputStream
(从文件中读取字节)读取文件,然后将其包装在InputStreamReader
中,该读取器使用指定的编码将这些字节转换为字符
new InputStreamReader(
new FileInputStream(
properties.get(FILE_BASED_CONFIGURATION).toString()), "UTF-8")