【Java】CsvFormatライブラリを使用してcsvファイルをアップロードするよ!

CsvFormatライブラリを使用してJavaでCSVアップロード機能を作成する手順を紹介します!

Spring BootでAPIのリクエストから受け取ったCSVファイルをアップロードし、CsvFormatを使用して処理する例を以下に示します
この例ではMultipartフォームでファイルをアップロードし、コントローラーでそのファイルを受け取り、CsvFormatを使用してCSVデータを解析します!

まず、Apache Commons CSVをプロジェクトに組み込みます。Mavenプロジェクトの場合は、pom.xmlファイルに以下の依存関係を追加します

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-csv</artifactId>
    <version>1.9</version> <!-- 最新のバージョンに置き換えてください -->
</dependency>

Gradleプロジェクトの場合は、build.gradleファイルに以下を追加します

implementation 'org.apache.commons:commons-csv:1.9' // 最新のバージョンに置き換えてください

では、CSVファイルのアップロード機能を実装していきましょう

import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVParser;
import org.apache.commons.csv.CSVRecord;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

@RestController
public class CsvUploadController {

    @PostMapping("/upload")
    public ResponseEntity<String> uploadCsv(@RequestParam("file") MultipartFile file) {
        if (file.isEmpty()) {
            return ResponseEntity.badRequest().body("No file uploaded");
        }

        try (BufferedReader reader = new BufferedReader(new InputStreamReader(file.getInputStream()))) {

            // CSVファイルのパース
            CSVParser csvParser = new CSVParser(reader, CSVFormat.DEFAULT);
            for (CSVRecord csvRecord : csvParser) {

                // 各行の処理
                String column1 = csvRecord.get(0); // 1番目の列
                String column2 = csvRecord.get(1); // 2番目の列

                // ここでデータベースへの保存などの処理を行う
                System.out.println("Column 1: " + column1 + ", Column 2: " + column2);
            }
        } catch (IOException e) {
            e.printStackTrace();
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Failed to process CSV file");
        }

        return ResponseEntity.ok("CSV file uploaded successfully");
    }
}

CSVファイルの内容はCSVRecordオブジェクトとして処理され、必要に応じてデータベースに保存されるなどの処理を行うことができます
また、エラーが発生した場合は適切なエラーレスポンスが返されます

ちなみに、「CSVFormat.DEFAULT」は以下のような処理がされます

  • 区切り文字:
    デフォルトではカンマ (,) が区切り文字として使用されますが、必要に応じて設定を変更することができます
  • クォート:
    デフォルトではクォート文字はダブルクォート (“) です
    クォートされたフィールド内に区切り文字が含まれている場合、そのフィールドはクォートされます
  • ヘッダー:
    デフォルトではヘッダーがないと仮定されます
    つまり、最初の行がデータとして処理されます
    必要に応じて、ヘッダーがあることを明示的に指定することもできます
  • 改行:
    デフォルトではWindows、Unix、または古いMac OS形式の改行文字が自動的に検出されます

便利ですね~

是非参考ください!

是非フォローしてください

最新の情報をお伝えします