`
zhang_xzhi_xjtu
  • 浏览: 536502 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

实践中的重构32_使用标准的IO操作写法。

 
阅读更多
看到这样一段代码,功能为读取一个指定文件的内容然后返回。
	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();
	}


1
2
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics