Pengantar CSV Apache Commons

1. Ikhtisar

Pustaka CSV Apache Commons memiliki banyak fitur yang berguna untuk membuat dan membaca file CSV.

Dalam tutorial singkat ini, kita akan melihat bagaimana menggunakan perpustakaan ini dengan menunjukkan contoh sederhana.

2. Ketergantungan Maven

Untuk memulai, kami akan mengimpor versi terbaru pustaka ini menggunakan Maven:

 org.apache.commons commons-csv 1.4  

Untuk memeriksa versi terbaru perpustakaan ini - buka di sini.

3. Membaca File CSV

Pertimbangkan file CSV berikut yang disebut book.csv yang berisi atribut sebuah buku:

author,title Dan Simmons,Hyperion Douglas Adams,The Hitchhiker's Guide to the Galaxy

Mari kita lihat bagaimana kita bisa membacanya:

Map AUTHOR_BOOK_MAP = new HashMap() { { put("Dan Simmons", "Hyperion"); put("Douglas Adams", "The Hitchhiker's Guide to the Galaxy"); } }); String[] HEADERS = { "author", "title"}; @Test public void givenCSVFile_whenRead_thenContentsAsExpected() throws IOException { Reader in = new FileReader("book.csv"); Iterable records = CSVFormat.DEFAULT .withHeader(HEADERS) .withFirstRecordAsHeader() .parse(in); for (CSVRecord record : records) { String author = record.get("author"); String title = record.get("title"); assertEquals(AUTHOR_BOOK_MAP.get(author), title); } }

Kami membaca catatan file CSV setelah melewati baris pertama karena itu adalah tajuk.

Ada berbagai jenis CSVFormat yang menentukan format file CSV, contohnya dapat Anda lihat di paragraf berikutnya.

4. Membuat File CSV

Mari kita lihat bagaimana kita dapat membuat file CSV yang sama seperti di atas:

public void createCSVFile() throws IOException { FileWriter out = new FileWriter("book_new.csv"); try (CSVPrinter printer = new CSVPrinter(out, CSVFormat.DEFAULT .withHeader(HEADERS))) { AUTHOR_BOOK_MAP.forEach((author, title) -> { printer.printRecord(author, title); }); } }

File CSV baru akan dibuat dengan header yang sesuai karena kami telah menentukannya dalam deklarasi CSVFormat kami .

5. Judul & Kolom Bacaan

Ada berbagai cara untuk membaca dan menulis header. Demikian pula, ada berbagai cara untuk membaca nilai kolom.

Mari kita bahas satu per satu:

5.1. Mengakses Kolom berdasarkan Indeks

Ini adalah cara paling dasar untuk membaca nilai kolom. Ini dapat digunakan jika header untuk file CSV tidak dikenal:

Reader in = new FileReader("book.csv"); Iterable records = CSVFormat.DEFAULT.parse(in); for (CSVRecord record : records) { String columnOne = record.get(0); String columnTwo = record.get(1); }

5.2. Mengakses Kolom dengan Header Standar

Ini adalah cara yang lebih intuitif untuk mengakses kolom jika dibandingkan dengan mengakses berdasarkan indeks:

Iterable records = CSVFormat.DEFAULT .withHeader("author", "title").parse(in); for (CSVRecord record : records) { String author = record.get("author"); String title = record.get("title"); }

5.3. Menggunakan Enums sebagai Header

Menggunakan String untuk mengakses nilai kolom bisa jadi rawan kesalahan. Menggunakan Enums daripada Strings akan membuat kode lebih terstandarisasi dan lebih mudah dipahami:

enum BookHeaders { author, title } Iterable records = CSVFormat.DEFAULT .withHeader(BookHeaders.class).parse(in); for (CSVRecord record : records) { String author = record.get(BookHeaders.author); String title = record.get(BookHeaders.title); }

5.4. Melewati Garis Header

Biasanya, file CSV berisi header di baris pertama. Karenanya, dalam banyak kasus, aman untuk melewatinya dan mulai membaca dari baris kedua.

Ini akan mendeteksi otomatis nilai kolom akses header:

Iterable records = CSVFormat.DEFAULT .withFirstRowAsHeader().parse(in); for (CSVRecord record : records) { String author = record.get("author"); String title = record.get("title"); }

5.5. Membuat File Dengan Header

Demikian pula, kita dapat membuat file CSV dengan baris pertama yang berisi header:

FileWriter out = new FileWriter("book_new.csv"); CSVPrinter printer = CSVFormat.DEFAULT .withHeader("author", "title").print(out);

6. Kesimpulan

Kami mempresentasikan penggunaan pustaka CSV Apache Commons melalui contoh sederhana. Anda dapat membaca lebih lanjut tentang perpustakaan di sini.

Kode untuk artikel ini tersedia di Github.