用 Java 將字串寫入 CSV 檔案

Rupam Yadav 2023年1月30日 2021年7月1日
  1. 在 Java 中使用 PrintWriter 讀取和寫入 CSV 檔案
  2. 在 Java 中使用 OpenCSV 庫讀取和寫入 CSV 檔案
用 Java 將字串寫入 CSV 檔案

CSV 代表 Comma Separated Values;它是系統之間大量資料傳輸的常用格式。還有許多與 Java 一起使用的解析器庫能夠處理這種格式。

在 Java 中使用 PrintWriter 讀取和寫入 CSV 檔案

Java 中的 PrinterWriter 函式是一個編寫器類,用於將物件的格式化表示列印到文字輸出流。我們建立了一個 writer 物件,傳遞一個名為 test.csv 的新檔案作為 writer 的目的地。在這裡,sb 物件將指定的字串附加到字元序列。

writer 例項上的 write() 方法將文字內容寫入流中。flush() 方法將內容重新整理到檔案中,close() 方法永久關閉流。我們還可以讀取 test.csv 檔案的內容。

TestCSV 類例項上呼叫 readCSVFile() 方法。在這裡,我們使用指定檔案中的值建立了 Scanner 類的例項。它使用分隔符模式將資料分解為標記。如果 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 解析器庫;它有一組 OpenCsv 類,我們用來讀取和寫入 CSV 檔案。在 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]
Author: 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