I've been over and over this, I'm sure there is something simple I am missing, but I can't figure out what it is, it seems like it should work... also why does the validator say I haven't closed my FileReader Streams?
package com.codegym.task.task19.task1916;
import javax.sound.sampled.Line;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
/*
Tracking changes
*/
public class Solution {
public static List<LineItem> lines = new ArrayList<>();
public static void main(String[] args) throws IOException {
BufferedReader fileNamesBufferedReader = new BufferedReader(new InputStreamReader(System.in));
String fileName1 = fileNamesBufferedReader.readLine();
String fileName2 = fileNamesBufferedReader.readLine();
fileNamesBufferedReader.close();
FileReader fileReader1 = new FileReader(fileName1);
FileReader fileReader2 = new FileReader(fileName2);
BufferedReader bufferForFileReader1 = new BufferedReader(fileReader1);
BufferedReader bufferForFileReader2 = new BufferedReader(fileReader2);
//Add all the Integers from the end of each line in file1 to file1ArrayList
ArrayList <Integer> file1ArrayList = new ArrayList<>();
String buff1Line = bufferForFileReader1.readLine();
while(buff1Line != null){
String line = (buff1Line.trim());
String[] lineNumSplit = line.split("line");
int lineNum = Integer.parseInt(lineNumSplit[1]);
file1ArrayList.add(lineNum);
buff1Line = bufferForFileReader1.readLine();
}
//Add all the Integers from the end of each line in file2 to file2ArrayList
ArrayList <Integer> file2ArrayList = new ArrayList<>();
String buff2Line = bufferForFileReader2.readLine();
while(buff2Line != null){
String line = (buff2Line.trim());
String[] lineNumSplit = line.split("line");
int lineNum = Integer.parseInt(lineNumSplit[1]);
file2ArrayList.add(lineNum);
buff2Line = bufferForFileReader2.readLine();
}
fileReader1.close();
fileReader2.close();
bufferForFileReader1.close();
bufferForFileReader2.close();
//TODO compare the two ArrayLists, add the appropriate line items to the lines arrayList
for(int j = 0; j < file1ArrayList.size();){
//If the line number of element is equal to the line item number in file2Array, add the line item as type same
//If the line number of element is smaller than the line item number in file2Array, add the line item as type removed and don't iterate yet
//If the line number of element is bigger than the line item number in file2Array, add the line item as type added and don't iterate yet
for(int i = 0; i < file2ArrayList.size();)
if((file1ArrayList.get(j)).equals(file2ArrayList.get(i))){
LineItem lineItem = new LineItem(Type.SAME,"line"+(file1ArrayList.get(j)).toString());
lines.add(lineItem);
i++;
j++;
}
else if((file1ArrayList.get(j)) < (file1ArrayList.get(i))){
LineItem lineItem = new LineItem(Type.REMOVED,"line"+file1ArrayList.get(j).toString());
lines.add(lineItem);
j++;
}
else if((file1ArrayList.get(j)) > (file2ArrayList.get(i))){
LineItem lineItem = new LineItem(Type.ADDED,"line"+file2ArrayList.get(i).toString());
lines.add(lineItem);
i++;
}
}
System.out.println("test"+lines.get(0));
for (LineItem element: lines) {
System.out.println(element);
}
}
public static enum Type {
ADDED, // New line added
REMOVED, // Line deleted
SAME // No change
}
public static class LineItem {
public Type type;
public String line;
public LineItem(Type type, String line) {
this.type = type;
this.line = line;
}
}
}