Java IO流 文件读写详解

IO流的概念与分类

IO(Input/Output)流是Java中用于处理输入输出操作的抽象概念。流可以看作一个数据序列的管道,数据像水流一样在程序与数据源之间传输。Java IO流主要分为两大类:

  1. 按流向分类

    • 输入流(InputStream/Reader):用于读取数据
    • 输出流(OutputStream/Writer):用于写入数据
  2. 按数据类型分类

    • 字节流:以字节为单位传输数据(8位)
    • 字符流:以字符为单位传输数据(16位)

字符流

字符流专门用于处理文本数据,能够正确处理Unicode字符。主要类包括:

常用字符流类

  • Reader/Writer:字符流的抽象基类
  • FileReader/FileWriter:用于文件读写的字符流
  • BufferedReader/BufferedWriter:带缓冲区的字符流,提高效率
  • InputStreamReader/OutputStreamWriter:字节流与字符流的桥梁

字符流使用示例

// 写入文件示例
try (FileWriter writer = new FileWriter("example.txt")) {
    writer.write("这是字符流写入的文本内容");
} catch (IOException e) {
    e.printStackTrace();
}

// 读取文件示例
try (BufferedReader reader = new BufferedReader(new FileReader("example.txt"))) {
    String line;
    while ((line = reader.readLine()) != null) {//返回null表示到达文件末尾
        System.out.println(line);
    }
} catch (IOException e) {
    e.printStackTrace();
}

字节流

字节流用于处理二进制数据,如图片、音频、视频等非文本文件。主要类包括:

常用字节流类

  • InputStream/OutputStream:字节流的抽象基类
  • FileInputStream/FileOutputStream:用于文件读写的字节流
  • BufferedInputStream/BufferedOutputStream:带缓冲区的字节流
  • DataInputStream/DataOutputStream:可以读写基本数据类型

字节流使用示例

// 写入文件示例
try (FileOutputStream fos = new FileOutputStream("data.dat")) {
    byte[] data = {65, 66, 67, 68}; // ASCII码对应A,B,C,D
    fos.write(data);
} catch (IOException e) {
    e.printStackTrace();
}

// 读取文件示例
try (FileInputStream fis = new FileInputStream("data.dat")) {
    int content;
    while ((content = fis.read()) != -1) {//返回-1,表示达到文件末尾
        System.out.print((char) content);
    }
} catch (IOException e) {
    e.printStackTrace();
}

选择原则

  1. 处理文本文件时优先使用字符流,可以正确处理字符编码
  2. 处理二进制文件(如图片、压缩包等)必须使用字节流
  3. 对于大文件操作,建议使用缓冲流(BufferedXXX)提高性能
  4. JDK7及以上版本推荐使用try-with-resources语句自动关闭资源
  5. 也可以手动调用.close()方法来关闭资源

你可能感兴趣的:(Java,java,开发语言)