Java边读文件变解析
我需要解决的问题
每条数据用分隔符号隔开。使用时读取内容。没有换行。
数据格式
123333333333;456546546546;
private List<String> getSNFromFile(String tmpFile, List<String> modellist, List<TerminalTaskStatus> errorSN) {FileInputStream in = null;BufferedReader br = null;InputStreamReader isReader = null;List<String> dataList = new ArrayList<>();do {try {in=new FileInputStream(tmpFile);isReader =new InputStreamReader(in, "UTF-8");br = new BufferedReader(isReader);int page = 4096;int off = 0;char[] SNs = new char[page];String buffer = ""; //保存读取但未处理的数据String isDealing = ""; //保存正在处理的数据int readbytes = 0; //保存当前读取的字节数while (true){readbytes = br.read(SNs, off, page);if (readbytes == -1 && buffer.isEmpty()){//文件读取结束break;}else if (readbytes != -1){off += readbytes;String strByte = new String(SNs,0,readbytes);buffer += strByte;buffer.replace(" ","");}//文件中没有分割符号“;”,即只有一个数据if (buffer.lastIndexOf(";") == -1){TerminalTaskStatus errorTask = new TerminalTaskStatus();//条件判断if (buffer.length() != 11){errorTask.setStatus(ConstantAPI.Data_is_illegal);errorTask.setTerminalid(buffer);errorSN.add(errorTask);break;}}else{if (readbytes >= page){isDealing = buffer.substring(0, buffer.lastIndexOf(";"));}else{isDealing = buffer;}buffer = buffer.substring(buffer.lastIndexOf(";")+1);//使用Apache库的StringUtils库解决数据前后的分隔符问题String[] machines = StringUtils.splitByWholeSeparator(isDealing, ";");//处理数据if (machines != null && machines.length > 0){for (String sn : machines){TerminalTaskStatus errorStatus = new TerminalTaskStatus();//数据必须是11位if (sn.length() != 11){errorStatus.setStatus(ConstantAPI.SN_is_illegal);errorStatus.setTerminalid(sn);errorSN.add(errorStatus);continue;}//保存一些数据String model = sn.substring(0, 3);if (!modellist.contains(model)){modellist.add(model);}//去重if (!dataList.contains(sn)){dataList.add(sn);}else{errorStatus.setStatus(ConstantAPI.Duplicate_SN);errorStatus.setTerminalid(sn);errorSN.add(errorStatus);}}}}if (readbytes < page){break;}}}catch (FileNotFoundException e){logger.error("FileNotFoundException, tmpFIle----"+tmpFile, e);break;}catch (IOException e){logger.error("IOException, tmpFIle----"+tmpFile, e);break;}catch (Exception e){logger.error("Exception, tmpFIle----"+tmpFile, e);break;}finally {if (br != null) {try {br.close();} catch (IOException e) {logger.error("IOException,close BufferedInputStream failed. tmpFIle----"+tmpFile, e);break;}}if (isReader != null){try {isReader.close();} catch (IOException e) {e.printStackTrace();}}if (in != null) {try {in.close();} catch (IOException e) {logger.error("IOException,close FileInputStream failed. tmpFIle----"+tmpFile, e);break;}}}}while (false);return dataList;}
处理逻辑:
将数据按指定大小读取出来,如果数据很多,做一个缓存,解析最大数据串,等于部分待下次解析。
Java边读文件变解析相关推荐
- java io 读文件
java io 读文件 /** * 读取文件 * @param fileName 文件名称 */ private void readFile(String fil ...
- Java中Xml文件的解析
开发中比较常见的解析方式有三种,如下: 1. DOM:要求解析器把整个XML文档装载到内存,并解析成一个Document对象. a) 优点:元素与元素之间保留结构关系,故可以进行增删改查操作. b) ...
- java对xml文件的解析_Java对XML文件的解析
XML简介 围绕XML涉及到四方面的技术: 1.数据定义Schema.DTD 2.数据解析DOM.SAX两种解析模型 3.样式风格XSTL,使用XSTL可以将XML文件中存放的内容按照指定的样式显示为 ...
- java 输出xml文件_java解析xml文件并输出
使用java解析xml文件,通过dom4j,代码运行前需先导入dom4j架包. ParseXml类代码如下: import java.io.File; import java.util.ArrayLi ...
- Java实现eml文件的解析
最近在做邮件归档,然后需要解析邮件导出的eml,记录每封邮件的归档时间,发件人.标题.发件时间.归档的目录 以下是一个demo示例:待完成此功能后再优化后续代码 import java.io.File ...
- Java第一次读文件慢_Java 关于文件读取速度问题,求助,谢谢啦
展开全部 /** * ip条目实体类 */ public class IpEntry { String country, province, city, region, local; long sta ...
- java guava json文件_Json解析文件位置的问题
有这么一段Json { "name": "java3d:vecmath:1.3.1" }, { "name": "net.sf.t ...
- java 快速读文件_java快速读取文件
如何优雅读取文件,java想简单读写一个文件都要上10行代码.幸好guava和apache commons 都有提供简单操作文件工具. 简单介绍读取文件最后一行.读取文件第一行.读取大文件.往大文件追 ...
- java单元测试读文件数据_如何将文本文件资源读入Java单元测试?
本问题已经有最佳答案,请猛点这里访问. 我有一个单元测试需要使用位于src/test/resources/abc.xml中的XML文件.把文件的内容放到String中最简单的方法是什么? 另外,sta ...
最新文章
- [翻译] Ruby Golf
- 单元测试Struts2的Action(包含源码)
- 【Windows 逆向】Cheat Engine 数据挖掘搜索方法和技巧 ( 数值类型选择 | 字符串数值类型选择 | 全部数值类型模糊选择 )
- Linux mktime 源代码简析
- 在微型计算机机箱的面板上,【简评】全侧透快拆设计,迎广101机箱体验
- KUR-Couriers
- 数据库学习建议之提高数据库速度的十条建议
- SELinux相关内容
- springboot+Druid+mybatis整合
- 数据库学习笔记4-隔离级别 Read Committed
- Regularized linear regression(正则化线性回归)----吴恩达机器学习
- 阅读圣经丨聚合与迭代
- 雷达信号处理——雷达系统
- 蜀海供应链数仓平台建设实践
- 数据库连接池实现原理
- Html 中的特殊符号表示
- 英语12个月份的英文和缩写
- 删除自定义reg注册表
- 使用Goodcrawler爬取700集的柯南
- 阿里云ecs服务器(Ubuntu)配置图形界面并远程桌面连接