I'm receiving an InputMismatchException
while scanning in the last int of a csv.
public class TradeSim {
public void readFile(String fileName) {
try {
// file name and absolute path
File file = new File(fileName);
String fullPath = file.getAbsolutePath();
System.out.println("Using file:\n" + fullPath + "\n");
// set File Input Stream to Full Path
FileInputStream inputStream = new FileInputStream(fullPath);
// open input stream and retrieve data
Scanner scanner = new Scanner(inputStream);
scanner.useDelimiter(System.getProperty("line.separator"));
while (scanner.hasNext()) {
String data = scanner.next(); // gets a whole line
System.out.println(data);
parseCSVLine(data);
}
scanner.close();
} catch (Exception e) {
System.out.println("Encountered Error reading file:\n" + e.toString() + "\n");
}
}
public void parseCSVLine(String line) {
Scanner scanner = new Scanner(line);
scanner.useDelimiter(",");
long timeStamp = scanner.nextLong();
System.out.println("timeStamp: " + timeStamp);
String symbol = scanner.next();
System.out.println("symbol: " + symbol);
int quantity = scanner.nextInt();
System.out.println("quantity: " + quantity);
int price = scanner.nextInt(); //Error occurs here!!
System.out.println("price: " + price);
Trades trades = new Trades(timeStamp, symbol, quantity, price);
}
}
File content:
51300051409,fbc,273,297
51300073658,cef,250,262
Output:
Using file:
/Users/andrewkeithly/netbeansprojects/Trades Exercise/input.csv51300051409,fbc,273,297
timeStamp: 51300051409
symbol: fbc
quantity: 273
Encountered Error reading file:
java.util.InputMismatchException
Problem Solved:
System.getProperty("line.separator")
was looking for a Unix specific delimiter in which the csv did not use.
Simply changing the code to scanner.useDelimiter("\r?\n");
solved my problem. Thanks @Tom !