HandleThatError
HandleThatError

Reputation: 640

My Java program doesn't iterate through my entire CSV file

Code:

import java.io.BufferedReader;
import java.io.FileReader;
import java.util.Scanner;

public class dataReader {

    @SuppressWarnings("rawtypes")
    public static void main(String[] args) throws Exception {
        String splitBy =",";
        BufferedReader br = new BufferedReader(new FileReader("C:/practice/testData.csv"));
        String line = br.readLine();
        int counter = 0;

        while ((line = br.readLine()) != null){
            counter++;
            String[] b = line.split(splitBy);

            for (int x = 0; x < b.length; x++){
                System.out.println(b[x]);
            }


        }
        System.out.println(counter);
        br.close();
    }   
}

When I run it, it goes through the CSV and displays some output but it starts with product ID 4000+. It basically only outputs results for the last thousand rows in the CSV. I'm wrangling with a really ugly CSV file to try to get some useful data out of it so that I can write all of it into a new database later on. I'd appreciate any tips.

Upvotes: 3

Views: 1081

Answers (4)

Matthew Gunn
Matthew Gunn

Reputation: 4519

Your code won't handle more complicated CSVs, eg a row:

"Robert, John", 25, "Chicago, IL"

is not going to get parsed correctly. Just splitting on ',' is going to separate "Robert, John" into multiple cells though it should be just 1 cell.

The point is, you shouldn't be writing a CSV parser. I highly recommend go downloading the Apache Commons CSV library and using that! Reading CSVs is a solved problem; why reinvent the wheel?

Upvotes: 2

Kevin
Kevin

Reputation: 1626

As in the comments, the issue is that System.out.println prints to your console. The console will have a limit to the number of lines it can display, which is why you see the last ~1000 lines.

Upvotes: 2

glethien
glethien

Reputation: 2471

At a frist glance at your code, you skip the first line by assigning a readline() to your string line

String line = br.readLine();

You should change that as you read the first line and than enter the loop which will read the 2nd line before any operations on the first line took place.

Try something like

String line = "";

Upvotes: 2

npinti
npinti

Reputation: 52185

Without seeing the structure of the file I can only speculate, but this line: String line = br.readLine(); needs to be changed to String line = "" or String line = null. As it currently stands, you are discarding your first line.

Upvotes: 1

Related Questions