java读取txt文件并做特殊处理
问题描述:txt文本内容如下
[FILEBEGIN] - [FUNDBEGIN] 之间的内容解析到map中
[FUNDBEGIN] - [RECORDBEGIN]之间的内容解析到map2中
[RECORDBEGIN] - [RECORDEND]之间的内容解析到list中
[FILEBEGIN]
Version=1.0
Sender=0F
Receiver=98
SendingDay=20190311
FundNum=1
[FUNDBEGIN]
FundID=159447
FundName=嘎嘎
FundManagementCompany=XX有限公司
UnderlyingIndex=399550
CreationRedemptionUnit=1000000.00
EstimateCashComponent=-9722.68
MaxCashRatio=0.50000
Publish=1
Creation=1
Redemption=1
TotalRecordNum=50
Type=3
TradingDay=20190311
PreTradingDay=20190308
CashComponent=-6876.68
NAVperCU=955667.32
NAV=0.9557
DividendPerCU=0.00
CreationLimit=0.00
RedemptionLimit=133500000.00
[RECORDBEGIN]
0|000002|小明 | 1100|1| 0.21000| | |XSHE |
0|002049|小明2 | 100|1| 0.21000| | |XSHE |
0|030333|小明3 | 900|1| 0.21000| | |XSHE |
0|040423|小明4 | 600|1| 0.21000| | |XSHE |
0|005538|小明5 | 100|1| 0.21000| | |XSHE |
0|070696|小明6 | 100|1| 0.21000| | |XSHE |
[RECORDEND]
[FUNDEND]
[FILEEND]
关键思路
电路开关的思想、打开true 关闭false
将文本中的[FILEBEGIN]、 [FUNDBEGIN]、[RECORDBEGIN] 设置为标志位,初始值都为false 关闭的意思
当文本读到 第一个标志位[FILEBEGIN]的时候, [FILEBEGIN]设置为 true 打开的意思,其余两个为false 关闭的意思
同理,当读到 [FUNDBEGIN]的时候,[FUNDBEGIN]设置为 true 打开的意思,其余两个为false 关闭的意思
这样就能保证,当前读文本的时候,只在有一种状态下,做当前状态下该做的操作
//实现代码
private static Map<String,Object> readFile(String filePath){
FileInputStream fis = null;
InputStreamReader isr = null;
BufferedReader br = null;
String line="";
boolean FILEBEGIN = false;
boolean FUNDBEGIN = false;
boolean RECORDBEGIN = false;
Map<String,String> fileMap = new HashMap<String,String>(16);
Map<String,String> fundMap = new HashMap<String,String>(16);
List<Map<String,String>> recordList = new ArrayList<Map<String,String>>();
Map<String,Object> resultMap = new HashMap<String,Object>(32);
try {
fis = new FileInputStream(filePath);
isr = new InputStreamReader(fis, "gbk");
//字符集
//System.out.println("字符集:"+isr.getEncoding());