web-dev-qa-db-ja.com

JAVAを使用してCSVファイルから列を読み取る

こんにちは、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のみです。誰でもこのコードを修正して最初の列全体を印刷するのを手伝ってもらえますか?ありがとう。

22
Newbie

変数lineに初期値以外の値が割り当てられるように、ループ内で連続的に入力を読み取ります

while ((line = br.readLine()) !=null) {
  ...
}

余談:この問題は OpenCSV などのCSVライブラリを使用して既に解決されています。 読み取りおよび書き込み CSVファイルの例を次に示します

16
Reimeus

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
18
Paul Vargas

たとえば、次のような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));
    }
16

行の値を変更していません。このようなものでなければなりません。

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を返します。上記のコードは行を設定し、それがヌルかどうかを確認します。

3
Matt Rink