打开并读取CSV文件
CSV(逗号分隔值)文件以纯文本形式存储表格数据,每行代表一条记录,字段间用特定分隔符(如逗号、分号)分隔,以下是几种常用的读取方法:
方法1:使用Java核心库
Java内置的BufferedReader
和String.split()
方法可以简单处理CSV文件,适合格式规范且无复杂转义字符的场景。
try (BufferedReader br = new BufferedReader(new FileReader("data.csv"))) { String line; while ((line = br.readLine()) != null) { String[] fields = line.split(","); // 按逗号分割字段 System.out.println(Arrays.toString(fields)); } } catch (IOException e) { e.printStackTrace(); }
注意点:若字段内容包含逗号或换行符,需手动处理转义,此方法可能不适用。
方法2:使用Apache Commons CSV
Apache Commons CSV是第三方库,提供对复杂CSV格式的完整支持(如引号、多行字段)。
- 添加Maven依赖:
<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-csv</artifactId> <version>1.10.0</version> </dependency>
- 读取代码:
try (Reader reader = Files.newBufferedReader(Paths.get("data.csv")); CSVParser parser = new CSVParser(reader, CSVFormat.DEFAULT)) { for (CSVRecord record : parser) { String name = record.get(0); // 按列索引获取值 String age = record.get("Age"); // 按列名获取值(需表头) System.out.println(name + ": " + age); } } catch (IOException e) { e.printStackTrace(); }
方法3:使用OpenCSV
OpenCSV是另一流行的CSV解析库,支持注解绑定对象。
- 添加Maven依赖:
<dependency> <groupId>com.opencsv</groupId> <artifactId>opencsv</artifactId> <version>5.8</version> </dependency>
- 读取为对象列表:
try (CSVReader reader = new CSVReader(new FileReader("data.csv"))) { List<String[]> allData = reader.readAll(); for (String[] row : allData) { System.out.println(Arrays.toString(row)); } } catch (IOException | CsvException e) { e.printStackTrace(); }
打开并读取TXT文件
TXT文件是纯文本格式,通常按行存储数据,以下是几种读取方式:
方法1:使用BufferedReader逐行读取
适合大文件,避免一次性加载内存。
try (BufferedReader br = new BufferedReader(new FileReader("data.txt"))) { String line; while ((line = br.readLine()) != null) { System.out.println(line); } } catch (IOException e) { e.printStackTrace(); }
方法2:使用Files类快速读取
Java 7+的Files
类提供简洁API,适合小文件。
try { List<String> lines = Files.readAllLines(Paths.get("data.txt")); lines.forEach(System.out::println); } catch (IOException e) { e.printStackTrace(); }
方法3:使用Scanner逐行解析
支持按正则表达式或分隔符处理内容。
try (Scanner scanner = new Scanner(new File("data.txt"))) { while (scanner.hasNextLine()) { String line = scanner.nextLine(); System.out.println(line); } } catch (FileNotFoundException e) { e.printStackTrace(); }
关键注意事项
- 异常处理:始终使用
try-with-resources
确保文件流自动关闭,避免资源泄漏。 - 文件路径:建议使用绝对路径或正确配置相对路径(相对于项目根目录)。
- 字符编码:明确指定编码(如UTF-8)以避免乱码:
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("data.csv"), StandardCharsets.UTF_8));
- 性能优化:大文件优先使用流式读取(如
BufferedReader
),而非一次性加载到内存。
- CSV文件:简单场景用
String.split()
,复杂场景推荐Apache Commons CSV或OpenCSV。 - TXT文件:小文件用
Files.readAllLines()
,大文件用BufferedReader
或Scanner
。 - 通用原则:始终处理异常、释放资源,并根据需求选择合适的第三方库。
引用说明
本文提到的第三方库链接:
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/7076.html