1.依赖
<dependency>
<groupId>com.opencsv</groupId>
<artifactId>opencsv</artifactId>
<version>5.0</version>
</dependency>
2.待提取文本
test1.csv
test2.csv
test3.csv
3.处理
找出三个数据文件中包含数据项A列和D列的所有数据,然后每个数据文件去重(A列相同名称的数据只取最先取到的一个),然后找出三个文件中都有的A列数据,分别打印出三个D列数据。
4.生成
data.csv
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();
}
}