こんにちは、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
のみです。誰でもこのコードを修正して最初の列全体を印刷するのを手伝ってもらえますか?ありがとう。
変数line
に初期値以外の値が割り当てられるように、ループ内で連続的に入力を読み取ります
while ((line = br.readLine()) !=null) {
...
}
余談:この問題は OpenCSV などのCSVライブラリを使用して既に解決されています。 読み取りおよび書き込み CSVファイルの例を次に示します
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
たとえば、次のような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));
}
行の値を変更していません。このようなものでなければなりません。
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を返します。上記のコードは行を設定し、それがヌルかどうかを確認します。