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); }*/ }