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処理メソッドを実装できます。
-
便利な
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]で提供されています。