Java で CSV ファイルに文字列を書き込む

Rupam Yadav 2023年10月12日
  1. Java で PrintWriter を使用して CSV ファイルの読み取りと書き込みを行う
  2. Java で OpenCSV ライブラリを使用したの CSV ファイルの読み取りと書き込み
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 データをライター実装に書き込むために使用されます。

CSVWriterwriter インスタンスを作成し、このオブジェクトで 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 Yadav
Rupam Yadav avatar Rupam Yadav avatar

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

関連記事 - Java CSV

関連記事 - Java String