1、题目:
2、实现代码:
package com.example.demo.test;
import java.io.*;
import java.util.*;
public class Test21 {
public static void main(String[] args) throws Exception{
BufferedReader bufferedReader = null;
BufferedWriter bufferedWriter = null;
FileReader fileReader = null;
String inPath = "D:\\temp";
String outPath = "D:\\temp_result";
System.out.println("\\");
List<List<String>> result = new ArrayList<>();
result.add(new ArrayList<>());
File file = new File(inPath);
for (File listFile : file.listFiles()) {
String path1 = listFile.getAbsolutePath();
System.out.println("Path() = " + path1);
try{
fileReader = new FileReader(path1);
bufferedReader = new BufferedReader(fileReader);
List<Integer> indexList = new ArrayList<>();
StringBuffer sb = new StringBuffer();
int num = 0;
char ch;
while ((num = bufferedReader.read()) != -1) {
ch = (char) num;
sb.append(ch);
}
String[] split1 = sb.toString().split("\r\n");
for (int i = 0; i < split1.length; i++) {
String s = split1[i];
String[] split2 = s.split("\t");
System.out.println("Arrays.toString(split2) = " + Arrays.toString(split2));
//处理表头数据
if (i == 0) {
for (int i2 = 0; i2 < split2.length; i2++) {
if (!result.get(0).contains(split2[i2])) {
indexList.add(result.get(0).size());
result.get(0).add(split2[i2]);
}else{
for (int i1 = 0; i1 < result.get(0).size(); i1++) {
if (result.get(0).get(i1).equals(split2[i2])) {
indexList.add(i1);
}
}
}
}
System.out.println("indexList = " + indexList);
}
//处理数据体
else{
List<String> temp = null;
for (int i1 = 0; i1 < indexList.size(); i1++) {
Integer index = indexList.get(i1);
if (i1 == 0){
if (!isExistId(result,split2[i1])) {
temp = new ArrayList<String>();
temp.add(split2[i1]);
result.add(temp);
}else {
temp = findResultLine(result, split2[i1]);
}
}else{
setSpace(temp,index);
temp.add(index , split2[i1]);
}
System.out.println("temp = " + temp);
}
}
//结果缓存集合处理
StringBuffer sb1 = new StringBuffer();
for (int i2 = 0; i2 < result.size(); i2++) {
List<String> list = result.get(i2);
//补全数据体
setSpace(list,result.get(0).size());
//整理数组为文本
for (int i1 = 0; i1 < list.size(); i1++) {
sb1.append(list.get(i1));
if (i1 + 1 != list.size()){
sb1.append("\t");
}
}
sb1.append("\r\n");
}
//写文件
File f = new File(outPath +"\\c.txt");
bufferedWriter = new BufferedWriter(new FileWriter(f));
bufferedWriter.write(sb1.toString());
bufferedWriter.flush();
System.out.println("result.size() = " + result.size());
System.out.println("result = " + result);
System.out.println(sb1);
}
}catch (Exception e){
e.printStackTrace();
}finally {
if (bufferedReader != null){
bufferedReader.close();
}
if (fileReader != null){
fileReader.close();
}
if (bufferedWriter != null){
bufferedWriter.close();
}
}
}
}
/**
* //补全数据体
* @param temp 操作的数组
* @param index 需要不全的最大长度
*/
public static void setSpace(List<String> temp,Integer index){
if (temp.size() < index) {
for (int j = temp.size() ; j < index; j++) {
temp.add(j ," ");
}
}
}
public static List findResultLine(List<List<String>> arg1,String id){
for (int i = 0; i < arg1.size(); i++) {
if (arg1.get(i).get(0).equals(id)) {
return arg1.get(i);
}
}
return null;
}
public static boolean isExistId(List<List<String>> arg1,String id){
for (int i = 1; i < arg1.size(); i++) {
if (arg1.get(i).get(0).equals(id)) {
return true;
}
}
return false;
}
}
3、控制台打印:
Path() = D:\temp\a.txt
Arrays.toString(split2) = [id, name]
indexList = [0, 1]
result.size() = 1
result = [[id, name]]
id name
Arrays.toString(split2) = [1, a]
temp = [1]
temp = [1, a]
result.size() = 2
result = [[id, name], [1, a]]
id name
1 a
Arrays.toString(split2) = [2, b]
temp = [2]
temp = [2, b]
result.size() = 3
result = [[id, name], [1, a], [2, b]]
id name
1 a
2 b
Path() = D:\temp\b.txt
Arrays.toString(split2) = [id, code]
indexList = [0, 2]
result.size() = 3
result = [[id, name, code], [1, a, ], [2, b, ]]
id name code
1 a
2 b
Arrays.toString(split2) = [1, 111]
temp = [1, a, ]
temp = [1, a, 111, ]
result.size() = 3
result = [[id, name, code], [1, a, 111, ], [2, b, ]]
id name code
1 a 111
2 b
Arrays.toString(split2) = [3, 333]
temp = [3]
temp = [3, , 333]
result.size() = 4
result = [[id, name, code], [1, a, 111, ], [2, b, ], [3, , 333]]
id name code
1 a 111
2 b
3 333
Path() = D:\temp\d.txt
Arrays.toString(split2) = [id, value, test]
indexList = [0, 3, 4]
result.size() = 4
result = [[id, name, code, value, test], [1, a, 111, , ], [2, b, , , ], [3, , 333, , ]]
id name code value test
1 a 111
2 b
3 333
Arrays.toString(split2) = [1, c1, t1]
temp = [1, a, 111, , ]
temp = [1, a, 111, c1, , ]
temp = [1, a, 111, c1, t1, , ]
result.size() = 4
result = [[id, name, code, value, test], [1, a, 111, c1, t1, , ], [2, b, , , ], [3, , 333, , ]]
id name code value test
1 a 111 c1 t1
2 b
3 333
Arrays.toString(split2) = [4, c4, t4]
temp = [4]
temp = [4, , , c4]
temp = [4, , , c4, t4]
result.size() = 5
result = [[id, name, code, value, test], [1, a, 111, c1, t1, , ], [2, b, , , ], [3, , 333, , ], [4, , , c4, t4]]
id name code value test
1 a 111 c1 t1
2 b
3 333
4 c4 t4