My csv is getting read into the System.out, but I've noticed that any text with a space gets moved into the next line (as a return \n)
Here's how my csv starts:
first,last,email,address 1, address 2
john,smith,blah@blah.com,123 St. Street,
Jane,Smith,blech@blech.com,4455 Roger Cir,apt 2
After running my app, any cell with a space (address 1), gets thrown onto the next line.
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class main {
public static void main(String[] args) {
// -define .csv file in app
String fileNameDefined = "uploadedcsv/employees.csv";
// -File class needed to turn stringName to actual file
File file = new File(fileNameDefined);
try{
// -read from filePooped with Scanner class
Scanner inputStream = new Scanner(file);
// hashNext() loops line-by-line
while(inputStream.hasNext()){
//read single line, put in string
String data = inputStream.next();
System.out.println(data + "***");
}
// after loop, close scanner
inputStream.close();
}catch (FileNotFoundException e){
e.printStackTrace();
}
}
}
So here's the result in the console:
first,last,email,address 1,address 2 john,smith,blah@blah.com,123 St. Street, Jane,Smith,blech@blech.com,4455 Roger Cir,apt 2
Am I using Scanner incorrectly?
Scanner.next()
does not read a newline but reads the next token, delimited by whitespace (by default, ifuseDelimiter()
was not used to change the delimiter pattern). To read a line useScanner.nextLine()
.Once you read a single line you can use
String.split(",")
to separate the line into fields. This enables identification of lines that do not consist of the required number of fields. UsinguseDelimiter(",");
would ignore the line-based structure of the file (each line consists of a list of fields separated by a comma). For example:As already mentioned, using a CSV library is recommended. For one, this (and
useDelimiter(",")
solution) will not correctly handle quoted identifiers containing,
characters.