Java I/O 流概览

Java 中的数据导入

Anthony Markham

VP Quant Developer

流的基础

  • 流是按 FIFO(先进先出)的单向数据通道
  • 字节流处理原始二进制数据(InputStream/OutputStream
  • 字符流处理文本并自动编码(Reader/Writer

流的示意图

Java 中的数据导入

字节流

  • 用于二进制数据(图像、音频等)
  • 抽象基类:InputStream(读),OutputStream(写)
  • 主要实现:FileInputStreamFileOutputStream
  • 关键方法:read() 返回字节,write() 输出字节

二进制文件:图像和音频

Java 中的数据导入

字节流

try (FileInputStream fis = new FileInputStream("data.bin")) {

byte[] buffer = new byte[1024]; int bytesRead;
while ((bytesRead = fis.read(buffer)) != -1) { // Process bytes in buffer
System.out.println("Read " + bytesRead + " bytes"); }
} catch (Exception e) { System.err.println("Error: " + e.getMessage()); }
Java 中的数据导入

字符流

  • 专为文本数据设计
  • 抽象基类:Reader(读文本),Writer(写文本)
  • 主要实现:FileReaderFileWriterBufferedReaderBufferedWriter
  • 便捷方法:readLine() 读取整行文本

CSV 文件

Java 中的数据导入

字符流

try (BufferedReader reader = new BufferedReader(new FileReader("data.csv"))) {
    String line;

while ((line = reader.readLine()) != null) { // Process each line System.out.println(line); }
} catch (Exception e) { System.err.println("Error: " + e.getMessage()); }
Java 中的数据导入

缓冲流 - 性能

  • 通过减少磁盘操作提升性能
  • 使用 BufferedInputStreamBufferedOutputStream 读/写字节
  • 使用 BufferedReaderBufferedWriter 读/写字符
    • readLine() 读取整行
Java 中的数据导入

缓冲流 - 性能

try (BufferedReader reader = new BufferedReader(new FileReader("data.csv"))) {
    // Header processing
    String header = reader.readLine();
    System.out.println("Header: " + header);

// Efficient data reading String line; int count = 0; while ((line = reader.readLine()) != null) { count++; } System.out.println("Read " + count + " data rows"); } catch (Exception e) { System.out.println("Error: " + e.getMessage()); }
Java 中的数据导入

流的链式组合

  • 链中每个流都增加特定功能
  • 常见模式:FileInputStream -> InputStreamReader -> BufferedReader
  • 始终关闭最外层流(其余会自动关闭)
Java 中的数据导入

流的链式组合

import java.nio.charset.StandardCharsets;
try (

BufferedReader reader = new BufferedReader(
new InputStreamReader(
new FileInputStream("data.csv"),
StandardCharsets.UTF_8 )
)
) { String line; while ((line = reader.readLine()) != null) { System.out.println(line);} } catch (Exception e) { System.err.println("Error: " + e.getMessage()); }
Java 中的数据导入

异常处理

  • 对 I/O 操作至关重要
  • 常见异常:IOExceptionFileNotFoundException
  • 始终使用 try-with-resources 来捕获异常
Java 中的数据导入

异常处理

import java.util.ArrayList;
import java.util.List;
public static List<String> readLines(String filePath) throws IOException {

List<String> lines = new ArrayList<>(); try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) { String line; while ((line = reader.readLine()) != null) { lines.add(line); } } // Stream automatically closed here return lines;
}
Java 中的数据导入

Passons à la pratique !

Java 中的数据导入

Preparing Video For Download...