当前位置: 技术文章>> Java 中如何读取和写入 CSV 文件?

文章标题:Java 中如何读取和写入 CSV 文件?
  • 文章分类: 后端
  • 9731 阅读
在Java中读取和写入CSV(逗号分隔值)文件是一项常见的任务,尤其适用于数据处理、报告生成或任何需要将数据以表格形式导入或导出的场景。尽管Java标准库(Java SE)本身不直接提供专门的CSV处理API,但我们可以利用一些基础类如`BufferedReader`、`BufferedWriter`以及字符串操作来实现这一功能。此外,还有一些第三方库如Apache Commons CSV、OpenCSV等,它们提供了更便捷、更强大的CSV处理能力。在本文中,我将首先介绍如何使用Java标准库手动处理CSV文件,然后简要提及使用Apache Commons CSV库的方法,以展现不同层次的实现方式。 ### 使用Java标准库读取CSV文件 要使用Java标准库读取CSV文件,我们主要依赖于`BufferedReader`类来逐行读取文件内容,然后自行处理字符串分割以获取每个字段的值。 #### 示例代码 以下是一个简单的示例,展示了如何使用Java标准库读取CSV文件: ```java import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; public class CsvReaderExample { public static void main(String[] args) { String filePath = "path/to/your/file.csv"; try (BufferedReader br = new BufferedReader(new FileReader(filePath))) { String line; while ((line = br.readLine()) != null) { // 假设CSV文件中没有引号包围的值或逗号转义 String[] values = line.split(","); for (String value : values) { System.out.print(value + " | "); } System.out.println(); // 换行 } } catch (IOException e) { e.printStackTrace(); } } } ``` **注意**:上述代码假设CSV文件中不包含用引号包围的字段或包含逗号作为字段内容的部分。在实际应用中,CSV文件可能会更复杂,包含引号、逗号、换行符等,这些都需要特别处理。 ### 使用Java标准库写入CSV文件 写入CSV文件的过程相对简单,主要使用`BufferedWriter`类。 #### 示例代码 ```java import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; public class CsvWriterExample { public static void main(String[] args) { String filePath = "path/to/your/output.csv"; try (BufferedWriter bw = new BufferedWriter(new FileWriter(filePath))) { String[] header = {"ID", "Name", "Age"}; bw.write(String.join(",", header) + "\n"); // 写入表头 String[] row1 = {"1", "Alice", "30"}; bw.write(String.join(",", row1) + "\n"); // 写入第一行数据 String[] row2 = {"2", "Bob", "25"}; bw.write(String.join(",", row2) + "\n"); // 写入第二行数据 // 可以继续写入更多行... } catch (IOException e) { e.printStackTrace(); } } } ``` ### 使用Apache Commons CSV库 尽管Java标准库足以处理简单的CSV文件操作,但对于更复杂的场景(如包含特殊字符的字段、不同的分隔符等),使用第三方库会更加方便和高效。Apache Commons CSV是其中一个流行的选择。 #### 读取CSV文件 使用Apache Commons CSV读取CSV文件时,你可以更轻松地处理复杂的字段值(如包含逗号或换行符的字段)。 ```java import org.apache.commons.csv.CSVFormat; import org.apache.commons.csv.CSVParser; import org.apache.commons.csv.CSVRecord; import java.io.FileReader; import java.io.IOException; import java.io.Reader; public class ApacheCsvReaderExample { public static void main(String[] args) { String filePath = "path/to/your/file.csv"; try (Reader reader = new FileReader(filePath); CSVParser csvParser = new CSVParser(reader, CSVFormat.DEFAULT .withFirstRecordAsHeader() .withIgnoreHeaderCase() .withTrim())) { for (CSVRecord csvRecord : csvParser) { // 假设CSV有ID, Name, Age三个字段 String id = csvRecord.get("ID"); String name = csvRecord.get("Name"); String age = csvRecord.get("Age"); System.out.println("ID: " + id + ", Name: " + name + ", Age: " + age); } } catch (IOException e) { e.printStackTrace(); } } } ``` #### 写入CSV文件 使用Apache Commons CSV写入CSV文件时,可以方便地控制字段的分隔符、引号字符等。 ```java import org.apache.commons.csv.CSVFormat; import org.apache.commons.csv.CSVPrinter; import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; import java.util.Arrays; public class ApacheCsvWriterExample { public static void main(String[] args) { String filePath = "path/to/your/output.csv"; try (BufferedWriter writer = Files.newBufferedWriter(Paths.get(filePath)); CSVPrinter csvPrinter = new CSVPrinter(writer, CSVFormat.DEFAULT .withHeader("ID", "Name", "Age"))) { csvPrinter.printRecord("1", "Alice", "30"); csvPrinter.printRecord("2", "Bob", "25"); // 可以继续添加更多记录... } catch (IOException e) { e.printStackTrace(); } } } ``` ### 总结 无论是使用Java标准库还是Apache Commons CSV库,读取和写入CSV文件都是Java编程中的一项基本技能。对于简单的CSV处理,Java标准库足以应对,但如果你需要处理更复杂的CSV文件(如包含特殊字符的字段),那么使用Apache Commons CSV或类似的第三方库会更加方便和高效。 在实际开发中,选择哪种方式取决于你的具体需求以及你对这些库的熟悉程度。不过,了解并掌握多种处理方式,将使你更加灵活地应对不同的数据处理任务。希望这篇文章对你有所帮助,并在你的码小课网站中为读者提供有价值的参考。
推荐文章