Pengenalan kepada Apache Commons CSV

1. Gambaran keseluruhan

Perpustakaan CSV Apache Commons mempunyai banyak ciri berguna untuk membuat dan membaca fail CSV.

Dalam tutorial ringkas ini, kita akan melihat bagaimana menggunakan perpustakaan ini dengan menunjukkan contoh yang mudah.

2. Ketergantungan Maven

Untuk memulakan, kami akan mengimport versi terbaru perpustakaan ini menggunakan Maven:

 org.apache.commons commons-csv 1.4  

Untuk memeriksa versi terbaru perpustakaan ini - pergi ke sini.

3. Membaca Fail CSV

Pertimbangkan fail CSV berikut yang disebut book.csv yang mengandungi atribut buku:

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

Mari lihat bagaimana kita dapat 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 rekod fail CSV setelah melewati baris pertama kerana tajuknya.

Terdapat pelbagai jenis CSVFormat yang menentukan format fail CSV, contoh yang dapat anda lihat di perenggan berikutnya.

4. Membuat Fail CSV

Mari lihat bagaimana kita dapat membuat fail 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); }); } }

Fail CSV baru akan dibuat dengan tajuk yang sesuai kerana kami telah menentukannya dalam deklarasi CSVFormat kami .

5. Tajuk & Lajur Bacaan

Terdapat pelbagai cara membaca dan menulis tajuk. Begitu juga, terdapat pelbagai cara untuk membaca nilai lajur.

Mari kita teliti satu persatu:

5.1. Mengakses Lajur mengikut Indeks

Ini adalah kaedah paling asas untuk membaca nilai lajur. Ini boleh digunakan apabila tajuk untuk fail CSV tidak diketahui:

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 Lajur oleh Pengetua yang Ditentukan

Ini adalah cara yang lebih intuitif untuk mengakses lajur jika dibandingkan dengan mengakses dengan 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 lajur boleh menjadi ralat. Menggunakan Enums dan bukannya Strings akan menjadikan kodnya lebih standard dan lebih mudah difahami:

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. Melangkau Garisan Header

Biasanya, fail CSV mengandungi tajuk pada baris pertama. Oleh itu, dalam kebanyakan kes, adalah selamat untuk melewatkannya dan mula membaca dari baris kedua.

Ini akan mengesan autodetect header mengakses nilai lajur:

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

5.5. Membuat Fail Dengan Pengepala

Begitu juga, kita boleh membuat fail CSV dengan baris pertama yang mengandungi tajuk:

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

6. Kesimpulannya

Kami memaparkan penggunaan perpustakaan CSV Apache Commons melalui contoh mudah. Anda boleh membaca lebih lanjut mengenai perpustakaan di sini.

Kod untuk artikel ini terdapat di Github.