Cara Menulis ke Fail CSV di Java

1. Gambaran keseluruhan

Dalam tutorial ringkas ini, kita akan belajar bagaimana menulis ke fail CSV menggunakan Java . CSV bermaksud Comma-Separated-Values ​​dan ini adalah format biasa untuk melakukan pemindahan data secara pukal antara sistem.

Untuk menulis fail CSV kami, kami akan menggunakan kelas dalam pakej java.io.

Kami akan membincangkan watak khas dan cara mengatasinya. Kami akan menyasarkan fail output kami untuk dibuka di Microsoft Excel dan Google Sheets.

Selepas contoh Java kami, kami akan melihat sebentar perpustakaan pihak ketiga yang tersedia untuk bekerja dengan fail CSV.

2. Menulis dengan PrintWriter

Kami akan menggunakan PrintWriter untuk menulis fail CSV kami. Untuk melihat lebih terperinci menggunakan java.io untuk menulis ke fail, lihat artikel kami mengenai menulis ke fail.

2.1. Menulis CSV

Pertama, mari buat kaedah untuk memformat satu baris data, yang ditunjukkan sebagai susunan String s:

public String convertToCSV(String[] data) { return Stream.of(data) .map(this::escapeSpecialCharacters) .collect(Collectors.joining(",")); }

Sebelum kita memanggil kaedah ini, mari kita susun beberapa contoh data:

List dataLines = new ArrayList(); dataLines.add(new String[] { "John", "Doe", "38", "Comment Data\nAnother line of comment data" }); dataLines.add(new String[] { "Jane", "Doe, Jr.", "19", "She said \"I'm being quoted\"" });

Dan dengan data tersebut, mari ubah setiap baris dengan convertToCSV dan tuliskan ke fail:

public void givenDataArray_whenConvertToCSV_thenOutputCreated() throws IOException { File csvOutputFile = new File(CSV_FILE_NAME); try (PrintWriter pw = new PrintWriter(csvOutputFile)) { dataLines.stream() .map(this::convertToCSV) .forEach(pw::println); } assertTrue(csvOutputFile.exists()); }

2.2. Mengendalikan Watak Khas

Dalam fail CSV, watak-watak tertentu bermasalah dan sebagai pembangun, kita jarang mempunyai kawalan sepenuhnya terhadap kualiti data kita. Oleh itu mari kita lihat bagaimana menangani watak khas.

Sebagai contoh, kami akan memfokuskan diri pada koma, petikan dan baris baru. Medan yang mengandungi koma atau tanda kutip akan dikelilingi oleh tanda petik ganda dan tanda kutip berganda akan diawali dengan tanda petik ganda. Kami akan menghilangkan barisan baru dan menggantinya masing-masing dengan ruang kosong.

Karakter mana yang menjadi masalah dan bagaimana mereka harus ditangani mungkin berbeza dengan kes penggunaan.

Kaedah convertToCSV kami memanggil kaedah escapeSpecialCharacters pada setiap data semasa ia membina String.

Mari kita laksanakan kaedah escapeSpecialCharacters kami sekarang:

public String escapeSpecialCharacters(String data) { String escapedData = data.replaceAll("\\R", " "); if (data.contains(",") || data.contains("\"") || data.contains("'")) { data = data.replace("\"", "\"\""); escapedData = "\"" + data + "\""; } return escapedData; }

3. Perpustakaan Pihak Ketiga

Seperti yang kita lihat dengan contoh kita, menulis fail CSV boleh menjadi rumit apabila kita mula memikirkan watak khas dan cara mengatasinya.

Nasib baik bagi kami, terdapat banyak perpustakaan pihak ketiga yang tersedia untuk bekerja dengan fail CSV dan banyak di antaranya mengendalikan watak khas ini dan kes luar biasa lain yang mungkin berlaku.

Mari kita lihat beberapa daripadanya:

  • Apache Commons CSV: Penawaran CSV Apache untuk bekerja dengan Fail CSV
  • Buka CSV: Perpustakaan CSV lain yang popular dan dikendalikan secara aktif
  • Flatpack: Perpustakaan CSV sumber terbuka yang sedang dikembangkan secara aktif
  • CSVeed: Sumber terbuka dan dikekalkan secara aktif

4. Kesimpulan

Dalam artikel ringkas ini, kami menunjukkan cara menulis fail CSV menggunakan kelas PrintWriter Java . Seterusnya, kami membincangkan dan menangani watak khas dalam data yang dikeluarkan.

Setelah contoh Java biasa kami, kami melihat gambaran keseluruhan perpustakaan pihak ketiga yang ada.

Kod contoh boleh didapati di GitHub.