您的位置:首页 > 运维架构 > Apache

论apache重复造的轮子

2016-07-04 17:07 351 查看

今天分享一下apache所重复造的轮子(FileUtils.readLines)

在org.apache.cxf.helpers 这个包下有个工具类也叫做FileUtils,和我们平时常用的 org.apache.commons.io 下面的工具类名称一致。那么在开发中使用导包ctrl+shift+o 快捷键导包,非常容易引用错误包,如果不涉及到字符集编码还好,否则容易走弯路。

今天分析一下 这个同名工具中的一个同名方法:readFile(File file)

public static List readLines(File file) throws IOException

l两个类中的方法明、参数类型、个数、返回值、异常类型完全一致。

但是 io包下的 FileUtils 进行了重写,同时提供了

public static List readLines(File file, String encoding) throws IOException 这个方法,有了这个方法为编程提供了便捷。

比较一下具体实现:(比较简单)

cxf readLines 使用的是FileReader 读取文件 ,传入BufferedReader中,然后循环变量出每一行存入list ,然后返回。

public static List<String> readLines(File file) throws Exception {
if (!file.exists()) {
return new ArrayList<String>();
}
BufferedReader reader = new BufferedReader(new FileReader(file));
List<String> results = new ArrayList<String>();
try {
String line = reader.readLine();
while (line != null) {
results.add(line);
line = reader.readLine();
}
} finally {
reader.close();
}
return results;
}


io包下的readFile方法逻辑更为严谨,明确判断了输入参数是文件,还是文件夹等。具体实现是使用的是同包下 IOUtils 提供的readLines方法这个方法中进行了 输入参数字符集的判断,如果字符集参数为空则使用InputStreamReader(input) 完成文件行读取,存入list返回。 如果字符集参数不为空 则使用了 InputStreamReader(InputStream in, String charsetName)

public static List<String> readLines(File file, String encoding) throws IOException {
InputStream in = null;
try {
in = openInputStream(file);
return IOUtils.readLines(in, encoding);
} finally {
IOUtils.closeQuietly(in);
}
}

public static List<String> readLines(InputStream input, String encoding) throws IOException {
if (encoding == null) {
return readLines(input);
} else {
InputStreamReader reader = new InputStreamReader(input, encoding);
return readLines(reader);
}
}

public static List<String> readLines(Reader input) throws IOException {
BufferedReader reader = new BufferedReader(input);
List<String> list = new ArrayList<String>();
String line = reader.readLine();
while (line != null) {
list.add(line);
line = reader.readLine();
}
return list;
}


回到主题,apache为什么这么做呢?

1:减少依赖

2:完全两个团队开发相互不知道对方有轮子

3:。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: