Java读取处理输出CSV

1.依赖

  <dependency>
      <groupId>com.opencsv</groupId>
      <artifactId>opencsv</artifactId>
      <version>5.0</version>
  </dependency>

2.待提取文本

test1.csv
test1
test2.csv
test2
test3.csv
test3

3.处理

找出三个数据文件中包含数据项A列和D列的所有数据,然后每个数据文件去重(A列相同名称的数据只取最先取到的一个),然后找出三个文件中都有的A列数据,分别打印出三个D列数据。

4.生成

data.csv
data

5.代码

import com.opencsv.CSVWriter;

import java.io.*;
import java.util.*;

public class DataHandle {
    public static void main(String[] args) {
        List<String[]> rawData1 = getRawList("test1.csv");
        List<String[]> rawData2 = getRawList("test2.csv");
        List<String[]> rawData3 = getRawList("test3.csv");

        List<String[]> changeData1 = getChangeList(rawData1);
        HashMap<String, String> changeMap2 = getHashMap(rawData2);
        HashMap<String, String> changeMap3 = getHashMap(rawData3);

        for (String[] test : changeData1){
            if (changeMap2.get(test[0])!= null && changeMap3.get(test[0])!= null){
                test[2] = changeMap2.get(test[0]);
                test[3] = changeMap3.get(test[0]);
            }
        }

        Iterator<String[]> iterator = changeData1.iterator();
        while (iterator.hasNext()){
            String[] next = iterator.next();
            if (next[2].equals("")){
                iterator.remove();
            }
        }

        try {
            writeCSVFile("data.csv", changeData1);
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    public static List<String[]> getRawList(String filename){
        List<String[]> rawList = new ArrayList<>();
        FileReader fr = null;
        BufferedReader br = null;      
        try {
            fr = new FileReader(filename);
            br = new BufferedReader(fr);
            String line = "";
            while ((line = br.readLine()) != null){
                String[] arrs = line.split(",");
                rawList.add(arrs);
            }
            br.close();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                br.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return rawList;
    }

    public static List<String[]> getChangeList(List<String[]> rawList){
        List<String[]> myList = new ArrayList<String[]>();
        for (String[] stringArray : rawList) {
            if (stringArray.length >= 4)
            {
                String[] myData = new String[]{stringArray[0], stringArray[3],"", ""};
                if (myList.size() == 0){
                    myList.add(myData);
                }else {
                    String[] temp = myList.get(myList.size()-1);
                    if (!temp[0].equals(myData[0])){
                        myList.add(myData);
                    }
                }
            }
        }
        return myList;
    }

    public static HashMap<String,String> getHashMap(List<String[]> rawList){
        List<String[]> myList = new ArrayList<String[]>();
        HashMap<String, String> myMap= new HashMap<>();
        for (String[] stringArray : rawList) {
            if (stringArray.length >= 4)
            {
                String[] myData = new String[]{stringArray[0], stringArray[3]};
                if (myList.size() == 0){
                    myList.add(myData);
                    myMap.put(myData[0], myData[1]);
                }else {
                    String[] temp = myList.get(myList.size()-1);
                    if (!temp[0].equals(myData[0])){
                        myList.add(myData);
                        myMap.put(myData[0], myData[1]);
                    }
                }
            }
        }
        return myMap;
    }

    public static void writeCSVFile(String writeFilePath, List<String[]> strArrayList) throws IOException{
        File file = new File(writeFilePath);
        if (file.exists())
            file.delete();
        CSVWriter writer = null;
        writer = new CSVWriter(new FileWriter(file));
        writer.writeAll(strArrayList);
        writer.close();
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值