Java で CSV ファイルに文字列を書き込む
CSV は Comma Separated Values
の略です。これは、システム間のかさばるデータ転送に一般的に使用される形式です。この形式で動作できるようにするために、Java とともに使用される多くのパーサーライブラリもあります。
Java で PrintWriter
を使用して CSV ファイルの読み取りと書き込みを行う
Java の PrinterWriter
関数は、オブジェクトのフォーマットされた表現をテキスト出力ストリームに出力するために使用されるライタークラスです。ライターの宛先として test.csv
という名前の新しいファイルを渡す writer
オブジェクトを作成します。ここで、sb
オブジェクトは指定された文字列を文字シーケンスに追加します。
writer
インスタンスの write()
メソッドは、テキストコンテンツをストリームに書き込みます。flush()
メソッドは内容をファイルにフラッシュし、close()
メソッドはストリームを完全に閉じます。test.csv
ファイルの内容を読み取ることもできます。
readCSVFile()
メソッドは、TestCSV
クラスインスタンスで呼び出されます。ここでは、指定されたファイルの値を使用して Scanner
クラスのインスタンスを作成しました。区切り文字パターンを使用してデータをトークンに分割します。スキャナーに別の入力行がある場合、hasNextLine()
は true を返します。したがって、next()
メソッドを使用してトークンデータの各行を読み取り、それを配列に格納して、最終的に出力を出力します。
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class TestCSV {
public static void main(String args[]) {
try (PrintWriter writer = new PrintWriter(new File("test.csv"))) {
StringBuilder sb = new StringBuilder();
sb.append("id");
sb.append(',');
sb.append("Name");
sb.append(',');
sb.append("Address");
sb.append('\n');
sb.append("101");
sb.append(',');
sb.append("John Doe");
sb.append(',');
sb.append("Las Vegas");
sb.append('\n');
writer.write(sb.toString());
writer.close();
System.out.println("done!");
} catch (FileNotFoundException e) {
System.out.println(e.getMessage());
}
TestCSV testCSV = new TestCSV();
testCSV.readCSVFile();
}
public void readCSVFile() {
List<List<String>> records = new ArrayList<>();
try (Scanner scanner = new Scanner(new File("test.csv"));) {
while (scanner.hasNextLine()) {
records.add(getRecordFromLine(scanner.nextLine()));
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
System.out.println(records.toString());
}
private List<String> getRecordFromLine(String line) {
List<String> values = new ArrayList<String>();
try (Scanner rowScanner = new Scanner(line)) {
rowScanner.useDelimiter(",");
while (rowScanner.hasNext()) {
values.add(rowScanner.next());
}
}
return values;
}
}
出力:
done!
[[id, Name, Address], [101, John Doe, Las Vegas]]
Java で OpenCSV
ライブラリを使用したの CSV ファイルの読み取りと書き込み
このライブラリの Maven 依存関係を以下に示します。
<dependency>
<groupId>com.opencsv</groupId>
<artifactId>opencsv</artifactId>
<version>5.4</version>
</dependency>
OpenCsv
は Java 用のシンプルなパーサーライブラリです。これには、CSV ファイルの読み取りと書き込みに使用する OpenCsv クラスのセットがあります。main()
メソッドでは、最初にメソッドを呼び出して、CSVWriter
クラスを使用して CSV ファイルに書き込みます。このクラスは、CSV データをライター実装に書き込むために使用されます。
CSVWriter
の writer
インスタンスを作成し、このオブジェクトで writeNext()
関数を呼び出して、区切り文字を使用して区切られた文字列の配列からのデータを含む CSV ファイルを生成します。close()
メソッドはライターストリームを閉じます。
CSV 形式で作成したファイルからデータを読み取るには、メインクラスオブジェクトで readCSVFile
メソッドを呼び出し、CSV ファイルを解析します。すべてのレコードを一度にリストに読み込むには、readAll()
メソッドを使用します。各レコードをループして出力します。
import com.opencsv.CSVReader;
import com.opencsv.CSVWriter;
import com.opencsv.exceptions.CsvException;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
public class CSVLibrary {
public static void main(String args[]) {
CSVLibrary csvLibrary = new CSVLibrary();
csvLibrary.writeToCsv();
csvLibrary.readCSVFile();
}
public void writeToCsv() {
String csv = "data.csv";
try {
CSVWriter writer = new CSVWriter(new FileWriter(csv));
String[] record = "2,Virat,Kohli,India,30".split(",");
writer.writeNext(record);
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public void readCSVFile() {
CSVReader reader = null;
try {
reader = new CSVReader(new FileReader("data.csv"));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
List<String[]> allRows = null;
try {
allRows = reader.readAll();
} catch (IOException e) {
e.printStackTrace();
} catch (CsvException e) {
e.printStackTrace();
}
for (String[] row : allRows) {
System.out.println(Arrays.toString(row));
}
}
}
出力:
[2, Virat, Kohli, India, 30]
Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.
LinkedIn