实现功能如下:
Java逐行读取.txt文件里面的数据到一个list集合里面,再加工.
处理编码格式问题,
处理读到空行的问题,
处理读到数据重复问题,
处理文件流释放不合理问题.
/**
* 测试逐行读txt文件并正确关闭文件流
*/
private static void testFileStream() {
final Logger LOG = LoggerFactory.getLogger(CmsHome.class);
InputStreamReader read = null;
BufferedReader bufferedReader = null;
String serverFile = "D:/ss.txt";
Set<String> tempSet = Sets.newHashSet();
List<String> allRulesList = Lists.newArrayList();
String encoding = "utf-8";
try {
//new FileInputStream(serverFile)可能异常
read = new InputStreamReader(new FileInputStream(serverFile), encoding);//考虑到编码格式,serverFile 将要读取的文件的目录
bufferedReader = new BufferedReader(read);
String lineTxt;
//bufferedReader.readLine()可能异常
while ((lineTxt = bufferedReader.readLine()) != null) {
if (tempSet.add(lineTxt)) { //set 去重复
if (lineTxt.isEmpty()) {//处理空行
continue;
}
allRulesList.add(lineTxt);
}
}
} catch (IOException e) {
LOG.debug("读取文件异常:" + e.getMessage());
} finally {
if (read != null) {
try {
read.close();
} catch (IOException e) {
LOG.debug("关闭文件read流异常:" + e.getMessage());
}
}
if (bufferedReader != null) {
try {
bufferedReader.close();
} catch (IOException e) {
LOG.debug("关闭文件bufferedReader流异常:" + e.getMessage());
}
}
}
//打印输出,验证执行结果。
for (String s : allRulesList) {
System.out.println(s);
}
}
如上图的测试结果,和d盘根目录下放置的一个txt文件以及文件的内容的展示。