合并txt文件,根据文件中id字段

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

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值