package com.cmos.ngoccontrol.util;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.cmos.core.logger.Logger;
import com.cmos.core.logger.LoggerFactory;
public class TxtOrCsvReaderUtil {
//日志
private static final Logger LOGGER = LoggerFactory.getActionLog(TxtOrCsvReaderUtil.class);
/*//用来标识已经中断解析
private static boolean terminateParseFlag = false;
//源表头
private List<String> title = new ArrayList<>();
//源表数据
private List<Map<String, Object>> result = new ArrayList<>();
//源文件中缺少字段信息的无效数据信息记录
private List<String> errorList = new ArrayList<String>();*/
public static Map<String, Object> readTxtOrCsv(String path, String splitStr, int controlParseNum) {
//用来标识已经中断解析
boolean terminateParseFlag = false;
//源表头
List<String> title = new ArrayList<String>();
//源表数据
List<Map<String, Object>> result = new ArrayList<Map<String, Object>>();
//源文件中缺少字段信息的无效数据信息记录
List<String> errorList = new ArrayList<String>();
Map<String, Object> mapR = new HashMap<String, Object>();
// 存放文件数据
File file = new File(path);
// 一行数据
String inString = "";
InputStream is = null;
InputStreamReader isr = null;
BufferedReader reader = null;
try {
is = new FileInputStream(file);
isr = new InputStreamReader(is, "GBK");
reader = new BufferedReader(isr);
// 读取行数
int rowCount = 1;
while ((inString = reader.readLine()) != null) {
if(!terminateParseFlag && controlParseNum != -1){
if (rowCount == 1) {
// 第一行
String[] split = inString.split(splitStr);
title = Arrays.asList(split);
} else {
String[] split = (inString+",a").split(splitStr);
if (title.size() != split.length-1) {
errorList.add(inString);
} else {
Map<String, Object> rowData = new HashMap<String, Object>();
for (int i = 0; i < title.size(); i++) {
rowData.put(title.get(i), split[i]);
}
result.add(rowData);
}
}
if(rowCount - 1 == controlParseNum){
terminateParseFlag = true;
/* new IOException();*/
break;
}
if(!"".equals(inString)){
rowCount++;
}
}
}
mapR.put("result", result);
mapR.put("title", title);
mapR.put("total", rowCount-2);
mapR.put("errorList", errorList);
return mapR;
} catch (IOException e) {
LOGGER.error("readTxtOrCsvDataWithTitle() error",e);
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
LOGGER.error("BufferedReader close() error",e);
}
}
if (isr != null) {
try {
isr.close();
} catch (IOException e) {
LOGGER.error("InputStreamReader close() error",e);
}
}
if (is != null) {
try {
is.close();
} catch (IOException e) {
LOGGER.error("InputStream close() error",e);
}
}
}
return mapR;
}
/*public static void main(String[] args) throws IOException {
Map<String, Object> map = TxtOrCsvReaderUtil.readTxtOrCsv("C://Users//wwx240071//Desktop//导出数据.csv", ",", 20);
System.out.println(map);
}*/
}