Reading a text file in a table in Java

advertisements

I'm pretty new to Java (currently enrolled in my first programming class), so the answer to my question could be right in front of me.

My goal is to read in a text file that reads as follows:

4563123,112211324135412
2312311,222121324135211
2312345,112211324135421
5527687,212111313124412
7867567,111111111111111

where the first set of numbers is an ID, and the second set is a set of answers to a test (of which I have the key). Once I've read in the answers I need to store them in an array (and I assume just an array, as my class has not covered ArrayLists yet). All of this data would need to be stored in one array, since I need to return it at the end of the method.

Here is the code that I have so far:

public static String[] readFile(String filename)throws IOException{
    Scanner inFile = new Scanner(filename);
    String line;
    String[] results = new String[101];
    int i = 0;
    while (inFile.hasNextLine()){
        line = inFile.nextLine();
        String[] incoming = line.split(",");
        String wid = incoming[0];
        String answer = incoming[1];
        results[i] = wid;
        results[i + 1] = answer;
        i += 2;

    }
    inFile.close();
    return results;
}

It's safe to ignore the String filename, it was passed in from the main.

Every time I run this method, I keep running into an ArrayOutOfBoundsException, mainly when I try to assign incoming[1] to answer.

I've been staring at this code longer than what is probably good for me, but it seems that I just can't wrap my head around it. Any help would be appreciated, whether that be telling me what is wrong or what I can do to improve.


Since you are using Java 7, use the new Files API and a try-with-resources statement; also, avoid copying empty lines:

final Path file = Paths.get(filename);
String line;
String[] incoming;
String[] results = new String[101];
int nrElements = 0;

try (
    final BufferedReader reader = Files.newBufferedReader(path,
        StandardCharsets.UTF_8);
) {
    while ((line = reader.readLine()) != null) {
        incoming = line.split(",");
        if (incoming.length != 2)
            continue;
        results[nrElements++] = incoming[0];
        results[nrElements++] = incoming[1];
    }
}

return Arrays.copyOfRange(results, 0, nrElements);