mirror of
https://github.com/frosch95/SmartCSV.fx.git
synced 2026-04-11 21:48:22 +02:00
switch to fastcsv as supercsv is not maintaned anymore
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
The MIT License (MIT)
|
||||
-----------------------------------------------------------------------------
|
||||
|
||||
Copyright (c) 2015-2019 javafx.ninja <info@javafx.ninja>
|
||||
Copyright (c) 2015-2021 javafx.ninja <info@javafx.ninja>
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
@@ -26,22 +26,24 @@
|
||||
|
||||
package ninja.javafx.smartcsv.csv;
|
||||
|
||||
import org.supercsv.prefs.CsvPreference;
|
||||
import ninja.javafx.smartcsv.preferences.Preferences;
|
||||
|
||||
import static ninja.javafx.smartcsv.preferences.Preferences.defaultPreferences;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public class CSVConfigurable {
|
||||
|
||||
protected CsvPreference csvPreference;
|
||||
protected Preferences csvPreference;
|
||||
|
||||
protected String fileEncoding;
|
||||
|
||||
public CSVConfigurable() {
|
||||
csvPreference = CsvPreference.EXCEL_NORTH_EUROPE_PREFERENCE;
|
||||
csvPreference = defaultPreferences();
|
||||
}
|
||||
|
||||
public void setCsvPreference(CsvPreference csvPreference) {
|
||||
public void setCsvPreference(Preferences csvPreference) {
|
||||
this.csvPreference = csvPreference;
|
||||
}
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
The MIT License (MIT)
|
||||
-----------------------------------------------------------------------------
|
||||
|
||||
Copyright (c) 2015-2019 javafx.ninja <info@javafx.ninja>
|
||||
Copyright (c) 2015-2021 javafx.ninja <info@javafx.ninja>
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
@@ -26,17 +26,13 @@
|
||||
|
||||
package ninja.javafx.smartcsv.csv;
|
||||
|
||||
import de.siegmar.fastcsv.reader.NamedCsvReader;
|
||||
import ninja.javafx.smartcsv.FileReader;
|
||||
import ninja.javafx.smartcsv.fx.table.model.CSVModel;
|
||||
import ninja.javafx.smartcsv.fx.table.model.CSVRow;
|
||||
import org.supercsv.exception.SuperCsvException;
|
||||
import org.supercsv.io.CsvMapReader;
|
||||
import org.supercsv.io.ICsvMapReader;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.nio.charset.Charset;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* reads the csv file and stores the values in csv model
|
||||
@@ -48,28 +44,38 @@ public class CSVFileReader extends CSVConfigurable implements FileReader<CSVMode
|
||||
@Override
|
||||
public void read(File file) throws IOException {
|
||||
|
||||
try (ICsvMapReader mapReader = new CsvMapReader(new java.io.FileReader(file.getAbsoluteFile(), Charset.forName(fileEncoding)),
|
||||
csvPreference)) {
|
||||
System.out.println(csvPreference);
|
||||
try (var csv = getNamedCsvReader(file)) {
|
||||
model = new CSVModel();
|
||||
|
||||
// the header columns are used as the keys to the Map
|
||||
String[] header = mapReader.getHeader(true);
|
||||
var header = csv.getHeader().toArray(new String[csv.getHeader().size()]);
|
||||
model.setHeader(header);
|
||||
|
||||
Map<String, String> customerMap;
|
||||
while ((customerMap = mapReader.read(header)) != null) {
|
||||
CSVRow row = model.addRow();
|
||||
csv.forEach(csvRow -> {
|
||||
var row = model.addRow();
|
||||
for (String column : header) {
|
||||
model.addValue(row, column, customerMap.get(column));
|
||||
model.addValue(row, column, csvRow.getField(column));
|
||||
}
|
||||
}
|
||||
} catch (IOException | SuperCsvException ex) {
|
||||
});
|
||||
|
||||
} catch (IOException ex) {
|
||||
// TODO perhaps a custom NinjaException that can properly identify and localize the exception message
|
||||
// is this a file not found? is this a corrupt csv? etc
|
||||
throw new IOException("Failed to read " + file + ": " + ex.getMessage(), ex);
|
||||
}
|
||||
}
|
||||
|
||||
private NamedCsvReader getNamedCsvReader(File file) throws IOException {
|
||||
var builder = NamedCsvReader.builder()
|
||||
.fieldSeparator(csvPreference.delimiterChar());
|
||||
if (csvPreference.quoteChar() != null) {
|
||||
builder.quoteCharacter(csvPreference.quoteChar());
|
||||
}
|
||||
|
||||
return builder.build(file.toPath(), Charset.forName(fileEncoding));
|
||||
}
|
||||
|
||||
public CSVModel getContent() {
|
||||
return model;
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
The MIT License (MIT)
|
||||
-----------------------------------------------------------------------------
|
||||
|
||||
Copyright (c) 2015-2019 javafx.ninja <info@javafx.ninja>
|
||||
Copyright (c) 2015-2021 javafx.ninja <info@javafx.ninja>
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
@@ -26,18 +26,17 @@
|
||||
|
||||
package ninja.javafx.smartcsv.csv;
|
||||
|
||||
import de.siegmar.fastcsv.writer.CsvWriter;
|
||||
import de.siegmar.fastcsv.writer.QuoteStrategy;
|
||||
import ninja.javafx.smartcsv.fx.table.model.CSVModel;
|
||||
import ninja.javafx.smartcsv.fx.table.model.CSVRow;
|
||||
import org.supercsv.io.CsvMapWriter;
|
||||
import org.supercsv.io.ICsvMapWriter;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileWriter;
|
||||
import java.io.IOException;
|
||||
import java.nio.charset.Charset;
|
||||
import java.util.Map;
|
||||
import java.util.List;
|
||||
|
||||
import static java.util.stream.Collectors.toMap;
|
||||
import static java.util.stream.Collectors.toList;
|
||||
|
||||
/**
|
||||
* filewriter for the csv
|
||||
@@ -52,22 +51,22 @@ public class CSVFileWriter extends CSVConfigurable implements ninja.javafx.smart
|
||||
|
||||
@Override
|
||||
public void write(File filename) throws IOException {
|
||||
ICsvMapWriter mapWriter = null;
|
||||
try {
|
||||
mapWriter = new CsvMapWriter(new FileWriter(filename.getAbsolutePath(), Charset.forName(fileEncoding)),
|
||||
csvPreference);
|
||||
mapWriter.writeHeader(model.getHeader());
|
||||
|
||||
try (var writer = getCsvWriter(filename)){
|
||||
writer.writeRow(model.getHeader());
|
||||
for(CSVRow row: model.getRows()) {
|
||||
Map<String, String> columns = convertMapFromModel(row);
|
||||
mapWriter.write(columns, model.getHeader());
|
||||
writer.writeRow(convertMapFromModel(row));
|
||||
}
|
||||
}
|
||||
finally {
|
||||
if( mapWriter != null ) {
|
||||
mapWriter.close();
|
||||
}
|
||||
}
|
||||
|
||||
private CsvWriter getCsvWriter(File filename) throws IOException {
|
||||
var writer = CsvWriter.builder().fieldSeparator(csvPreference.delimiterChar());
|
||||
if (csvPreference.quoteChar() != null) {
|
||||
writer.quoteCharacter(csvPreference.quoteChar());
|
||||
writer.quoteStrategy(QuoteStrategy.ALWAYS);
|
||||
}
|
||||
|
||||
return writer.build(filename.toPath(), Charset.forName(fileEncoding));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -75,13 +74,8 @@ public class CSVFileWriter extends CSVConfigurable implements ninja.javafx.smart
|
||||
* @param row the row to convert
|
||||
* @return a simple map for the supercvs writer
|
||||
*/
|
||||
private Map<String, String> convertMapFromModel(CSVRow row) {
|
||||
return row.getColumns().entrySet().stream()
|
||||
.collect(
|
||||
toMap(
|
||||
Map.Entry::getKey,
|
||||
e -> e.getValue().getValue().getValue() != null ? e.getValue().getValue().getValue() : ""
|
||||
)
|
||||
);
|
||||
private List<String> convertMapFromModel(CSVRow row) {
|
||||
return row.getColumns().values().stream().map(v -> v.get().getValue())
|
||||
.collect(toList());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user