看到这样一段代码,功能为读取一个指定文件的内容然后返回。
该代码有如下地方可以改进:
1 使用StringBuiler.
2 使用标准的IO操作写法。
3 原有代码catch异常后,异常被吞没了,导致有可能返回只读了一半的文件。
4 删除原有代码冗余的close方法调用。
5 原有代码在创建 Reader时过于繁琐,可以简化。
6 原有读取逻辑没有考虑文件中包含\r\n的情况,沟通后确认该文件内容的使用与\r\n无关,可以忽略。
改动如下:
private String parseContent(String filePath) {
StringBuffer sb = new StringBuffer();
BufferedReader reader = null;
String tempLine = null;
try {
reader = new BufferedReader(new InputStreamReader(
new FileInputStream(filePath)));
while ((tempLine = reader.readLine()) != null) {
sb.append(tempLine);
}
reader.close();
} catch (Exception e) {
if (reader != null) {
try {
reader.close();
} catch (Exception ex) {
log(ex);
}
reader = null;
}
} finally {
if (reader != null) {
try {
reader.close();
} catch (Exception e) {
log(e);
}
}
reader = null;
}
return sb.toString();
}
该代码有如下地方可以改进:
1 使用StringBuiler.
2 使用标准的IO操作写法。
3 原有代码catch异常后,异常被吞没了,导致有可能返回只读了一半的文件。
4 删除原有代码冗余的close方法调用。
5 原有代码在创建 Reader时过于繁琐,可以简化。
6 原有读取逻辑没有考虑文件中包含\r\n的情况,沟通后确认该文件内容的使用与\r\n无关,可以忽略。
改动如下:
private String parseContent2(String filePath) {
StringBuilder sb = new StringBuilder();
BufferedReader reader = null;
try {
reader = new BufferedReader(new FileReader(filePath));
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line);
}
} catch (Exception e) {
log(e);
//使用null表示读取异常。
return null;
} finally {
if (reader != null) {
try {
reader.close();
} catch (Exception e) {
log(e);
}
}
}
return sb.toString();
}