Чтение столбца из файла CSV с использованием JAVA
Привет, Я пытаюсь прочитать файл CSV под названием
test.csv
в JAVA.
Ниже мой код:
import java.io.BufferedReader;
import java.io.FileReader;
public class InsertValuesIntoTestDb {
@SuppressWarnings("rawtypes")
public static void main(String[] args) throws Exception {
String splitBy = ",";
BufferedReader br = new BufferedReader(new FileReader("test.csv"));
String line = br.readLine();
while(line!=null){
String[] b = line.split(splitBy);
System.out.println(b[0]);
}
br.close();
}
}
Это мой файл CSV (test.csv):
a,f,w,b,numinst,af,ub
1RW,800,64,22,1,48:2,true
1RW,800,16,39,1,48:2,true
1RW,800,640,330,1,48:2,true
1RW,800,40,124,1,48:2,true
1RW,800,32,104,1,48:2,true
1RW,800,8,104,1,48:2,true
1R1W,800,65536,39,1,96:96,true
1R1W,800,2048,39,1,96:96,true
1R1W,800,8192,39,1,48:48,true
Я пытаюсь напечатать первый столбец в csv, но я получаю только a
в бесконечном цикле. Может кто-нибудь, пожалуйста, помогите мне исправить этот код, чтобы напечатать весь первый столбец. Спасибо.
Ответы
Ответ 1
Прочитайте ввод непрерывно в цикле, чтобы переменной line
присвоено значение, отличное от начального значения
while ((line = br.readLine()) !=null) {
...
}
Кроме того: эта проблема уже решена с использованием библиотек CSV, таких как OpenCSV. Вот примеры для чтения и записи CSV файлов
Ответ 2
Если вы используете Java 7+, вы можете использовать NIO.2, например:
❍ Code:
public static void main(String[] args) throws Exception {
File file = new File("test.csv");
List<String> lines = Files.readAllLines(file.toPath(),
StandardCharsets.UTF_8);
for (String line : lines) {
String[] array = line.split(",");
System.out.println(array[0]);
}
}
❍ Output:
a
1RW
1RW
1RW
1RW
1RW
1RW
1R1W
1R1W
1R1W
Ответ 3
Разделение по запятой не работает все время, например, если у вас есть файл csv, например
"Name" , "Job" , "Address"
"Pratiyush, Singh" , "Teacher" , "Berlin, Germany"
Итак, я бы рекомендовал использовать API Apache Commons CSV:
Reader in = new FileReader("input1.csv");
Iterable<CSVRecord> records = CSVFormat.EXCEL.parse(in);
for (CSVRecord record : records) {
System.out.println(record.get(0));
}
Ответ 4
Вы не меняете значение строки. Это должно быть что-то вроде этого.
import java.io.BufferedReader;
import java.io.FileReader;
public class InsertValuesIntoTestDb {
@SuppressWarnings("rawtypes")
public static void main(String[] args) throws Exception {
String splitBy = ",";
BufferedReader br = new BufferedReader(new FileReader("test.csv"));
while((line = br.readLine()) != null){
String[] b = line.split(splitBy);
System.out.println(b[0]);
}
br.close();
}
}
readLine возвращает каждую строку и возвращает только null, когда ничего не осталось. Вышеупомянутый код устанавливает строку и затем проверяет, является ли она нулевым.
Ответ 5
Вы должны поместить этот line = br.readLine();
внутрь цикла while после System.out.println(b[0]);