package com.example.demo.util;

import lombok.extern.slf4j.Slf4j;

import java.io.*;
import java.util.ArrayList;
import java.util.List;

/**
* 文件解析公共工具类
*
* @author gblfy
* @date 2020-10-13
*/
@Slf4j
public class FileUtil {

//----------------------------------------文件解析单元测试----------------------------------------
public static void main(String[] args) throws IOException {
//
FileUtil fileUtil = new FileUtil();
String[] fileParseMsg = fileUtil.fileParse("D:\\cmiip_Dir\\S_I_0000000001_020\\");

String v1 = fileParseMsg[0];
String v2 = fileParseMsg[1];
// String v3 = fileParseMsg[2];
// String v4 = fileParseMsg[3];
// String v5 = fileParseMsg[4];
log.debug("保单号: {} 客户姓名: {}", v1, v2);


//D:\cmiip_Dir\S_I_0000000001_020\S_I_0000000001_020.txt文件内容如下:
//001|雨昕|中国山东|喜欢穿新衣服|可爱
}

/**
* 文件解析
*
* @param localErrorTxtPath 应用本地待解析的文件路径
*/
public String[] fileParse(String localErrorTxtPath) {
BufferedReader bw = null;
try {
List<String> listfile = new ArrayList<String>();// 存放控制文件的集合
File file = new File(localErrorTxtPath);
File[] f1 = file.listFiles();
for (int i = 0; i < f1.length; i++) {
// 现获取对应的解析文件中的信息
System.out.println("list集合中的数据:" + f1[i].getName());
if (f1[i].getName().endsWith(".txt")) {
listfile.add(f1[i].getName());
System.out.println("把需要的解析的txt文件放入到集合中:" + f1[i].getName());
continue;
}
}
for (int i = 0; i < listfile.size(); i++) {
String filename = listfile.get(i);
bw = new BufferedReader(
new InputStreamReader(new FileInputStream(localErrorTxtPath
+ filename), "utf-8"));
String message = null;
while ((message = bw.readLine()) != null) {
// 此方法具体处理数据文件中的每条客户信息
return dealErrorTxtInfo(message, filename);
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (bw != null) {
bw.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}


/**
* 此方法用于具体处理数据文件中的每条数据信息 |(分隔符)
*/
private String[] dealErrorTxtInfo(String message, String filename) {

System.out.println("文件名称:" + filename + " , 处理的数据信息为:" + message);
// "||"作为分隔符,正确的写法为:str.split("\\|\\|")
String[] contextStr = message.split("\\|", -1);
System.out.println("总字段长度为:" + contextStr.length);
return contextStr;
}
}