您好我正在尝试在JAVA中读取名为test.csv
的CSV文件。
以下是我的代码:
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
。任何人都可以帮我修复此代码以打印整个第一列。感谢。
答案 0 :(得分:18)
如果您使用的是Java 7+,则可能需要使用NIO.2,例如:
❍代码:
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(",", -1);
System.out.println(array[0]);
}
}
❍输出:
a
1RW
1RW
1RW
1RW
1RW
1RW
1R1W
1R1W
1R1W
答案 1 :(得分:16)
在循环内连续读取输入,以便为变量line
分配一个非初始值的值
while ((line = br.readLine()) !=null) {
...
}
除此之外:使用OpenCSV等CSV库已解决此问题。以下是reading and writing CSV文件的示例
答案 2 :(得分:16)
如果你有像
这样的csv文件,则用逗号分割不会一直有效"Name" , "Job" , "Address"
"Pratiyush, Singh" , "Teacher" , "Berlin, Germany"
所以,我建议使用Apache Commons CSV API:
Reader in = new FileReader("input1.csv");
Iterable<CSVRecord> records = CSVFormat.EXCEL.parse(in);
for (CSVRecord record : records) {
System.out.println(record.get(0));
}
答案 3 :(得分:3)
您没有更改line的值。它应该是这样的。
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。上面的代码设置了行,然后检查它是否为空。