Skip to content

Instantly share code, notes, and snippets.

@Marconymous
Last active December 7, 2022 09:56
Show Gist options
  • Save Marconymous/54b0f168ed7fa4091c0b11f74d283e55 to your computer and use it in GitHub Desktop.
Save Marconymous/54b0f168ed7fa4091c0b11f74d283e55 to your computer and use it in GitHub Desktop.
Java CSV Import / Export Implementation
import java.io.File;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class CSVFileHandler<T extends CSVFileHandler.CSVSerializable<? extends T>> {
public interface CSVSerializable<T> {
String toCSV(char delimiter);
String getCSVHeader(char delimiter);
T fromCSV(String[] csv);
}
public List<T> read(String fileName, char delimiter, T object) {
var file = new File(fileName);
System.out.println("Reading from file: " + file.getAbsolutePath());
try {
var scanner = new Scanner(file);
scanner.nextLine();
ArrayList<T> objs = new ArrayList<>();
while (scanner.hasNextLine()) {
var line = scanner.nextLine();
System.out.println("Read Line: " + line);
var values = line.split(String.valueOf(delimiter));
var newObj = object.fromCSV(values);
objs.add(newObj);
}
return objs;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public void write(String fileName, char delimiter, T[] objects) {
write(fileName, delimiter, List.of(objects));
}
public void write(String fileName, char delimiter, List<T> objects) {
var file = new File(fileName);
System.out.println("Writing to file: " + file.getAbsolutePath());
try {
var writer = new FileWriter(file);
writer.append(objects.get(0).getCSVHeader(delimiter)).append(System.lineSeparator());
for (var obj : objects) {
var values = obj.toCSV(delimiter);
writer.append(values).append(System.lineSeparator());
}
writer.flush();
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment