用 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 資料寫入編寫器實現。
我們建立一個 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