Skip to content

Commit

Permalink
Add files via upload
Browse files Browse the repository at this point in the history
  • Loading branch information
roytuts authored May 15, 2019
1 parent e808581 commit d2a8fd4
Show file tree
Hide file tree
Showing 7 changed files with 175 additions and 0 deletions.
4 changes: 4 additions & 0 deletions java-csv/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
apply plugin: 'java'

sourceCompatibility = 1.8
targetCompatibility = 1.8
4 changes: 4 additions & 0 deletions java-csv/csv.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
SURNAME,MIDDLENAME,EMAIL,NAME,AGE
Scarry,Noname,null,Jason,16
Krueger,,[email protected],Fred,Unknown
Scarry,Noname,[email protected],Jason,16
2 changes: 2 additions & 0 deletions java-csv/csv1.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
NAME,MIDDLENAME,SURNAME,AGE
Jason,Noname,Scarry,16
3 changes: 3 additions & 0 deletions java-csv/csv2.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
MIDDLENAME,NAME,AGE,SURNAME,EMAIL
,Fred,Unknown,Krueger,[email protected]
Noname,Jason,16,Scarry,[email protected]
46 changes: 46 additions & 0 deletions java-csv/src/main/java/com/jeejava/csv/CsvApplication.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package com.jeejava.csv;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import com.jeejava.csv.parser.CsvParser;
import com.jeejava.csv.vo.CsvVo;

public class CsvApplication {

public static void main(String[] args) throws IOException {
File csv1 = new File("C:/csv/csv1.csv");
File csv2 = new File("C:/csv/csv2.csv");

List<String> csv1Headers = CsvParser.getHeadersFromACsv(csv1);
//csv1Headers.forEach(h -> System.out.print(h + " "));
//System.out.println();
List<String> csv2Headers = CsvParser.getHeadersFromACsv(csv2);
//csv2Headers.forEach(h -> System.out.print(h + " "));
//System.out.println();

List<String> allCsvHeaders = new ArrayList<>();
allCsvHeaders.addAll(csv1Headers);
allCsvHeaders.addAll(csv2Headers);
//allCsvHeaders.forEach(h -> System.out.print(h + " "));
//System.out.println();

Set<String> uniqueHeaders = new HashSet<>(allCsvHeaders);
//uniqueHeaders.forEach(h -> System.out.print(h + " "));
//System.out.println();

List<CsvVo> csv1Records = CsvParser.getRecodrsFromACsv(csv1, csv1Headers);
List<CsvVo> csv2Records = CsvParser.getRecodrsFromACsv(csv2, csv2Headers);

List<CsvVo> allCsvRecords = new ArrayList<>();
allCsvRecords.addAll(csv1Records);
allCsvRecords.addAll(csv2Records);

CsvParser.writeToCsv(new File("C:/csv/csv.csv"), uniqueHeaders, allCsvRecords);
}

}
86 changes: 86 additions & 0 deletions java-csv/src/main/java/com/jeejava/csv/parser/CsvParser.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
package com.jeejava.csv.parser;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Set;

import com.jeejava.csv.vo.CsvVo;

public class CsvParser {

public static List<CsvVo> getRecodrsFromACsv(File file, List<String> keys) throws IOException {
BufferedReader br = new BufferedReader(new FileReader(file));
List<CsvVo> records = new ArrayList<>();
boolean isHeader = true;

String line = null;
while ((line = br.readLine()) != null) {
if (isHeader) {// first line is header
isHeader = false;
continue;
}
CsvVo record = new CsvVo(file.getName());
String[] lineSplit = line.split(",");
for (int i = 0; i < lineSplit.length; i++) {
record.put(keys.get(i), lineSplit[i]);
}
records.add(record);
}

br.close();

return records;
}

public static List<String> getHeadersFromACsv(File file) throws IOException {
BufferedReader br = new BufferedReader(new FileReader(file));
List<String> headers = null;

String line = null;
while ((line = br.readLine()) != null) {
String[] lineSplit = line.split(",");
headers = new ArrayList<>(Arrays.asList(lineSplit));
break;
}

br.close();

return headers;
}

public static void writeToCsv(final File file, final Set<String> headers, final List<CsvVo> records)
throws IOException {
FileWriter csvWriter = new FileWriter(file);

// write headers
String sep = "";
String[] headersArr = headers.toArray(new String[headers.size()]);
for (String header : headersArr) {
csvWriter.append(sep);
csvWriter.append(header);
sep = ",";
}

csvWriter.append("\n");

// write records at each line
for (CsvVo record : records) {
sep = "";
for (int i = 0; i < headersArr.length; i++) {
csvWriter.append(sep);
csvWriter.append(record.get(headersArr[i]));
sep = ",";
}
csvWriter.append("\n");
}

csvWriter.flush();
csvWriter.close();
}
}
30 changes: 30 additions & 0 deletions java-csv/src/main/java/com/jeejava/csv/vo/CsvVo.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package com.jeejava.csv.vo;

import java.util.LinkedHashMap;
import java.util.Map;

public class CsvVo {

private Map<String, String> keyVal;

public CsvVo(String id) {
keyVal = new LinkedHashMap<>();// you may also use HashMap if you don't need to keep order
}

public Map<String, String> getKeyVal() {
return keyVal;
}

public void setKeyVal(Map<String, String> keyVal) {
this.keyVal = keyVal;
}

public void put(String key, String val) {
keyVal.put(key, val);
}

public String get(String key) {
return keyVal.get(key);
}

}

0 comments on commit d2a8fd4

Please sign in to comment.