1. ภาพรวม
พูดง่ายๆคือไฟล์ CSV (Comma Separated Values) มีข้อมูลที่จัดระเบียบโดยคั่นด้วยตัวคั่นลูกน้ำ
ในบทช่วยสอนนี้เราจะดูวิธีต่างๆในการอ่านไฟล์ CSV ลงในอาร์เรย์
2. BufferedReaderในjava.io
ครั้งแรกที่เราจะได้อ่านบันทึกทีละบรรทัดโดยใช้readLine ()ในBufferedReader จากนั้นเราจะแบ่งบรรทัดออกเป็นโทเค็นตามตัวคั่นลูกน้ำ
List
records = new ArrayList(); try (BufferedReader br = new BufferedReader(new FileReader("book.csv"))) { String line; while ((line = br.readLine()) != null) { String[] values = line.split(COMMA_DELIMITER); records.add(Arrays.asList(values)); } }
โปรดทราบด้วยวิธีนี้ CSV ที่ซับซ้อนยิ่งขึ้น (เช่นการอ้างอิงหรือรวมเครื่องหมายจุลภาคเป็นค่า) จะไม่ถูกแยกวิเคราะห์ตามที่ต้องการ
3. สแกนเนอร์ในjava.util
ต่อไปเราจะใช้java.util.Scannerเพื่อเรียกใช้เนื้อหาของไฟล์และดึงข้อมูลทีละบรรทัดทีละรายการ:
List
records = new ArrayList(); try (Scanner scanner = new Scanner(new File("book.csv"));) { while (scanner.hasNextLine()) { records.add(getRecordFromLine(scanner.nextLine())); } }
จากนั้นเราจะแยกวิเคราะห์เส้นและเก็บไว้ในอาร์เรย์:
private List getRecordFromLine(String line) { List values = new ArrayList(); try (Scanner rowScanner = new Scanner(line)) { rowScanner.useDelimiter(COMMA_DELIMITER); while (rowScanner.hasNext()) { values.add(rowScanner.next()); } } return values; }
เช่นเดียวกับก่อนหน้านี้ด้วยวิธีนี้ CSV ที่ซับซ้อนกว่านี้จะไม่ถูกแยกวิเคราะห์ตามที่ตั้งใจไว้
4. OpenCSV
เราสามารถจัดการกับไฟล์ CSV ที่ซับซ้อนมากขึ้นด้วย OpenCSV
OpenCSV เป็นไลบรารีของบุคคลที่สามซึ่งมี API เพื่อทำงานกับไฟล์ CSV เราจะใช้เมธอด readNext ()ในCSVReaderเพื่ออ่านบันทึกในไฟล์:
List
records = new ArrayList
(); try (CSVReader csvReader = new CSVReader(new FileReader("book.csv"));) { String[] values = null; while ((values = csvReader.readNext()) != null) { records.add(Arrays.asList(values)); } }
หากต้องการเจาะลึกและเรียนรู้เพิ่มเติมเกี่ยวกับ OpenCSV - เราสามารถดูบทแนะนำ OpenCSV ของเรา
5. สรุป
ในบทช่วยสอนฉบับย่อนี้เราได้สำรวจวิธีต่างๆในการอ่านไฟล์ CSV ลงในอาร์เรย์
เช่นเคยซอร์สโค้ดแบบเต็มของตัวอย่างมีอยู่ใน GitHub