OpenCSVの紹介

1前書き

この簡単な記事では、OpenCSV 4、 .csv ファイルの作成、読み取り、直列化、直列化復元、および/または構文解析のための素晴らしいライブラリを紹介します。以下に、OpenCSV 4をセットアップして使用する方法を示すいくつかの例を紹介します。

2セットアップ

pom.xml 依存関係を使用してOpenCSVをプロジェクトに追加する方法は次のとおりです。

<dependency>
    <groupId>com.opencsv</groupId>
    <artifactId>opencsv</artifactId>
    <version>4.1</version>
</dependency>

OpenCSV用の .jars は、http://opencsv.sourceforge.net/[公式サイト]またはhttps://mvnrepository.com/artifact/com.opencsv/opencsv[Maven Repositoryで簡単に検索できます。]。

.csv ファイルは非常に単純になるでしょう。2列4行にします。

colA, ColB
A, B
C, D
G, G
G, F

3豆にかどうか

OpenCSVを__pom.xmlに追加した後、2つの便利な方法でCSV処理メソッドを実装できます。

  1. 便利な CSVReader および CSVWriter オブジェクトを使用する

操作)または 。 CsvToBean を使用して .csv ファイルをBean(これは

注釈付きの plain-old-java-objects )として実装されています。

この記事では synchronous (または blocking )の例を使用して基本を説明します。

覚えておいて欲しいのは、 synchronous メソッドは、それが終了するまで周囲のコードや後続のコードが実行されるのを防ぐということです。実稼働環境では、 asynchronous メソッドが終了するまでに他のプロセスやメソッドを完了させることができる asynchronous または( non-blocking )メソッドを使用する可能性があります。

今後の記事では、OpenCSVの非同期例について詳しく説明します。

3.1. CSVReader

CSVReader - 提供されている readAll() および readNext() メソッドを介して!

readAll ()を同期的に使用する方法を見てみましょう。

public List<String[]> readAll(Reader reader) throws Exception {
    CSVReader csvReader = new CSVReader(reader);
    List<String[]> list = new ArrayList<>();
    list = csvReader.readAll();
    reader.close();
    csvReader.close();
    return list;
}

それから BufferedReader を渡すことでそのメソッドを呼び出すことができます。

public String readAllExample() throws Exception {
    Reader reader = Files.newBufferedReader(
      ClassLoader.getSystemResource("csv/twoColumn.csv").toURI());
    return CsvReaderExamples.readAll(reader).toString();
}

同様に、 readNext ()を抽象化して、提供された .csv を1行ずつ読み取ることができます。

public List<String[]> oneByOne(Reader reader) throws Exception {
    List<String[]> list = new ArrayList<>();
    CSVReader csvReader = new CSVReader(reader);
    String[]line;
    while ((line = csvReader.readNext()) != null) {
        list.add(line);
    }
    reader.close();
    csvReader.close();
    return list;
}

そして__BufferReaderを渡すことで、ここでそのメソッドを呼び出すことができます。

public String oneByOneExample() throws Exception {
    Reader reader = Files.newBufferedReader(
      ClassLoader.getSystemResource("csv/twoColumn.csv").toURI());
    return CsvReaderExamples.oneByOne(reader).toString();
}

より高い柔軟性と設定オプションのためにあなたは代わりに CSVReaderBuilder を使うことができます:

CSVParser parser = new CSVParserBuilder()
    .withSeparator(',')
    .withIgnoreQuotations(true)
    .build();

CSVReader csvReader = new CSVReaderBuilder(reader)
    .withSkipLines(0)
    .withCSVParser(parser)
    .build();

CSVReaderBuilder CSVParserBuilder を通して列見出しをスキップして解析ルールを設定することを可能にします。

CSVParserBuilder を使用すると、カスタムの列区切り文字の選択、引用符の無視または処理、nullフィールドの処理方法、およびエスケープ文字の解釈方法を指定できます。これらの設定の詳細については、公式仕様書http://opencsv.sourceforge.net/apidocs/index.html[docs]を参照してください。

いつものように、メモリリークを防ぐためにすべての Readers を閉じることを忘れないでください!

3.2. CSVWriter

CSVWriter も同様に、一度に1行ずつ、または1行ずつ .csv ファイルに書き込むことができます。

.csv に1行ずつ書き込む方法を見てみましょう。

public String csvWriterOneByOne(List<String[]> stringArray, Path path) throws Exception {
    CSVWriter writer = new CSVWriter(new FileWriter(path.toString()));
    for (String[]array : stringArray) {
        writer.writeNext(array);
    }

    writer.close();
    return Helpers.readFile(path);
}

それでは、そのファイルを保存する場所を指定して、今作成したメソッドを呼び出しましょう。

public String csvWriterOneByOne() throws Exception{
    Path path = Paths.get(
      ClassLoader.getSystemResource("csv/writtenOneByOne.csv").toURI());
    return CsvWriterExamples.csvWriterOneByOne(Helpers.fourColumnCsvString(), path);
}

.csv の行を表す String 配列の List を渡すことで、一度に .csv をすべて書き込むこともできます。 :

public String csvWriterAll(List<String[]> stringArray, Path path) throws Exception {
     CSVWriter writer = new CSVWriter(new FileWriter(path.toString()));
     writer.writeAll(stringArray);
     writer.close();
     return Helpers.readFile(path);
}

そして、これが私たちの呼称です。

public String csvWriterAll() throws Exception {
    Path path = Paths.get(
      ClassLoader.getSystemResource("csv/writtenAll.csv").toURI());
    return CsvWriterExamples.csvWriterAll(Helpers.fourColumnCsvString(), path);
}

それでおしまい!

3.3. 豆ベースの読み方

OpenCSVは .csv ファイルを、注釈付きのJava pojo Beanとして実装されたプリセットスキーマと再利用可能スキーマにシリアル化することができます。 CsvToBean CsvToBeanBuilder を使用して構築されます。 OpenCSV 4以降、 CsvToBeanBuilder com.opencsv.bean.CsvToBean. を操作するための推奨される方法です。

これは、 section 2 の2列の .csv をシリアル化するために使用できる単純なBeanです。

public class SimplePositionBean  {
    @CsvBindByPosition(position = 0)
    private String exampleColOne;

    @CsvBindByPosition(position = 1)
    private String exampleColTwo;

   //getters and setters
}

.csv ファイルの各列は、Beanのフィールドに関連付けられています。

.csv 列見出し間のマッピングは、それぞれ位置によるマッピングまたは見出し文字列の一致を指定する @ CsvBindByPosition アノテーションまたは @ CsvBindByName アノテーションを使用して実行できます。

まず、CsvBeanというスーパークラスを作成しましょう。これで、以下で構築するメソッドを再利用して一般化することができます。

public class CsvBean { }

子クラスの例:

public class NamedColumnBean extends CsvBean {

    @CsvBindByName(column = "name")
    private String name;

    @CsvBindByName
    private int age;

   //getters and setters
}

CsvToBean を使用して、同期的に返された List を抽象化しましょう。

 public List<CsvBean> beanBuilderExample(Path path, Class clazz) throws Exception {
     CsvTransfer csvTransfer = new CsvTransfer();
     ColumnPositionMappingStrategy ms = new ColumnPositionMappingStrategy();
     ms.setType(clazz);

     Reader reader = Files.newBufferedReader(path);
     CsvToBean cb = new CsvToBeanBuilder(reader)
       .withType(clazz)
       .withMappingStrategy(ms)
       .build();

    csvTransfer.setCsvList(cb.parse());
    reader.close();
    return csvTransfer.getCsvList();
}

Bean( clazz )を渡して、それを ColumnPositionMappingStrategy として設定します。そうすることで、Beanのフィールドを .csv 行のそれぞれの列に関連付けます。

これは、先ほど書いた CsvBean SimplePositionBean サブクラスを使ってここで呼び出すことができます。

public String simplePositionBeanExample() throws Exception {
    Path path = Paths.get(
      ClassLoader.getSystemResource("csv/twoColumn.csv").toURI());
    return BeanExamples.beanBuilderExample(path, SimplePositionBean.class).toString();
}

または、ここで NamedColumnBeanを使用します。 __CsvBeanの別のサブクラス:

public String namedColumnBeanExample() throws Exception {
    Path path = Paths.get(
      ClassLoader.getSystemResource("csv/namedColumn.csv").toURI());
    return BeanExamples.beanBuilderExample(path, NamedColumnBean.class).toString();
}

3.4. Beanベースの書き込み

最後に、 StatefulBeanToCsv クラスを使用して .csv ファイルに書き込む方法を見てみましょう。

public String writeCsvFromBean(Path path) throws Exception {
    Writer writer  = new FileWriter(path.toString());

    StatefulBeanToCsv sbc = new StatefulBeanToCsvBuilder(writer)
       .withSeparator(CSVWriter.DEFAULT__SEPARATOR)
       .build();

    List<CsvBean> list = new ArrayList<>();
    list.add(new WriteExampleBean("Test1", "sfdsf", "fdfd"));
    list.add(new WriteExampleBean("Test2", "ipso", "facto"));

    sbc.write(list);
    writer.close();
    return Helpers.readFile(path);
}

ここでは、指定された CsvBean オブジェクトの List として提供されるデータをどのように区切るかを指定しています。

希望する出力ファイルパスを渡した後、メソッド writeCsvFromBean() を呼び出すことができます。

public String writeCsvFromBeanExample() {
    Path path = Paths.get(
      ClassLoader.getSystemResource("csv/writtenBean.csv").toURI());
    return BeanExamples.writeCsvFromBean(path);
}

4結論

そこに行きます - bean、 CSVReader 、そして CSVWriter を使った OpenCSV のための同期コード例公式文書http://opencsv.sourceforge.net/[ここをチェックしてください。]

いつものように、コードサンプルはhttps://github.com/eugenp/tutorials/tree/master/libraries[over GitHub]で提供されています。