JavaSE 流式读取文件数据
【摘要】 给定一个文本文件,用java代码进行流式读取数据,输出至控制台。
经典习题:给定一个文本文件,用java代码进行流式读取数据,输出至控制台。
小发现:out和err同时使用会乱序,原因是out输出是带有缓存的,所以err会先被控制台打印出来。
核心业务代码:
package com.miracle.tears.detail;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
/** 流式读取文件 进行分组 */
public class StreamGroup {
public static void main(String[] args) throws IOException {
// 1. 定义文件路径
String filePath = "src/main/resources/StreamGroupFile.txt";
// 2. 创建文件输入流,读取文件(字节流)
FileInputStream fis = new FileInputStream(filePath);
// 3. 转换为字符流,设置编码
InputStreamReader isr = new InputStreamReader(fis);
// 4. 缓冲流提升效率
BufferedReader br = new BufferedReader(isr);
// 流式分组开始
// 5. 定义所需要的参数
// 5.1 当前的key
String currentKey = null;
// 5.2 当前的value
String currentValue = null;
// 5.3 前一个key
String previousKey = null;
// 5.4 前一个value
String previousValue = null;
// 6. 定义装载结果的集合
List<String> groupList = new ArrayList<>();
// 7. 定义读取到的内容,作为循环判断的条件
String tempLine;
// 8. 循环读取
while ((tempLine = br.readLine()) != null ){
// 8.1 获取当前行,以空格隔开
String [] kvArray = tempLine.split("\\s");
// 8.2 设置当前的key 和 value
currentKey = kvArray[0];
currentValue = kvArray[1];
// 9. 边界问题(上边界和下边界)
// 9.1 上边界
if (previousKey == null){
// 9.1.1 此时代表的处理的所有数据的 第一行数据
groupList.add(tempLine);
// 9.1.2 更新 previousKey 的变化
previousKey = currentKey;
}else if (currentKey.equals(previousKey)){
// 9.2 同一个key 即代表同组,直接追加
groupList.add(tempLine);
}else {
// 9.3 不是同一个key 说明不同组,输出上一组,构建新组
// 9.3.1 流式读取完毕一组,输出
System.out.println("=====流式读取开始=====");
for (String line : groupList){
System.out.println("当前为流式读取同组:"+line);
}
/**
* 如果测试用 err 打印,会乱序输出。
* 原因是out是带有缓存的,而err没有。
*/
System.out.println("=====流式读取结束=====");
// 9.3.2 更新key
previousKey = currentKey;
// 10. 清空集合
groupList.clear();
// 11. 添加当前读取的数据
groupList.add(tempLine);
}
}
// 12. 下边界
for (String line : groupList) {
System.out.println("最后一组:"+line);
}
// 13. 关闭资源
br.close();
isr.close();
fis.close();
}
}
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)