I am new to file handling in Java. My input file is a csv file with a number of columns. My objective is to create a new file each time I encounter a different value in the input .csv file and append to it if the file already exists but the file is being overwritten instead, which is apparent by keeping watch over the file size when the program is running.
Example Input File:
100, 1000
200, 2000
200, 3000
300, 4000
Example Output Files (Expected):
100.csv:
100,1000
200.csv:
200, 2000
200, 3000
300.csv:
300, 4000
Example Output Files (Actual):
100.csv:
100, 1000
200.csv:
200,3000
300.csv:
300,4000
Code:
public class App {
public static void main(String[] args) throws Exception {
List<File> filesInFolder = Files.walk(Paths.get("D:/java-projects/task_usage"))
.filter(Files::isRegularFile)
.map(Path::toFile)
.collect(Collectors.toList());
for(File file : filesInFolder) {
Sheet sheet = new Sheet();
String inputFile = file.getAbsolutePath();
BufferedReader br = new BufferedReader(new FileReader(inputFile));
String line = "";
while ((line = br.readLine()) != null) {
sheet.add(line.split(","));
}
br.close();
for(String[] row : sheet.getSheet()) {
String outputFile = "H:/Files/" + row[3] + ".csv";
BufferedWriter bw = new BufferedWriter(new FileWriter(outputFile));
bw.append(String.join(",", row));
bw.append("\n");
bw.close();
}
}
}
}
public class Sheet {
private List<String[]> sheet = null;
public Sheet() {
sheet = new ArrayList<>();
}
// adds a new row to the sheet
public Boolean add(String[] row) {
Long diff = Long.parseLong(row[1]) - Long.parseLong(row[0]);
String[] newRow = new String[row.length + 1];
newRow[0] = diff + "";
for(Integer i = 1, j = 0; j < row.length; i++) {
newRow[i] = row[j++];
}
return this.sheet.add(newRow);
}
// retrieves a row from the sheet
public String[] get(Integer index) {
return this.sheet.get(index);
}
public void setSheet(List<String[]> sheet) {
this.sheet = sheet;
}
public List<String[]> getSheet() {
return this.sheet;
}
}
public class SheetSorter {
// sorts the sheet
public static Sheet sortSheet(Sheet sheet) {
List<String[]> list = sheet.getSheet().stream().collect(Collectors.toList());
Collections.sort(list, new Comparator<String[]>() {
@Override
public int compare(String[] arr1, String[] arr2) {
if (Long.parseLong(arr1[3]) == Long.parseLong(arr2[3])) {
return (int) (Long.parseLong(arr1[4]) - Long.parseLong(arr2[4]));
}
else {
return (int) (Long.parseLong(arr1[3]) - Long.parseLong(arr2[3]));
}
}
});
sheet.setSheet(list);
return sheet;
}
}
Where have I gone wrong?