我用Java编写了一个csvReader方法。 一切似乎都工作正常,但它只是在打印值时跳过第一列中每行的第一个字母。这是我的代码=>
public static void csvReader(String fileName) {
try {
BufferedReader fileReader = new BufferedReader(new FileReader(fileName));
List<Student> students = new ArrayList<>();
fileReader.readLine();
while (fileReader.read() > 0) {
String line = fileReader.readLine();
String[] tokens = line.split(COMMA_DELIMETER);
if (tokens.length > 0) {
Student student = new Student(tokens[0], tokens[1], Integer.valueOf(tokens[2]),
Integer.valueOf(tokens[3]));
students.add(student);
}
}
students.forEach(System.out::println);
} catch (Exception ex) {
ex.printStackTrace();
}
}
这里的“Student”只是一个具有名字、姓氏、id 和年龄字段的 POJO 类。得到的输出为 =>
Student details : ID = 101 first name = ikhil Last name = Chaurasia age = 28
Student details : ID = 102 first name = adhna Last name = Chaurasia age = 28
结果应该像=>
Student details : ID = 101 first name = Nikhil Last name = Chaurasia age = 28
Student details : ID = 102 first name = Sadhna Last name = Chaurasia age = 28
csv文件内容如下所示:
toString方法的实现如下所示:
public String toString() {
return "Student details : ID = "+id+ " first name = "+firstName+ " Last name = "+lastName+ " age = "+age;
}
任何帮助将不胜感激。 谢谢
最佳答案
问题出在您的 while
循环条件中:fileReader.read() > 0
。
每次调用它时都会读取一个字符(例如“N”、“S”),这会导致对 readLine
的后续调用跳过第一个字符。
相反,只需使用 readLine
检查条件:
String line;
while ((line = fileReader.readLine()) != null) {
String[] tokens = line.split(COMMA_DELIMETER);
// do the rest of the stuff
}
关于java - csvReader 在读取 csv 文件时跳过第一列每行的第一个字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56093470/