第五章:Java高级特性 第三节 文件I/O操作

1. Java I/O流的基本概念

  • 什么是I/O流?

    I/O流是指输入输出流,用来处理数据的读取和写入。在Java中,I/O流分为字节流字符流,分别处理字节和字符的数据传输。

    • 字节流 :用于处理二进制数据,如图片、视频等,常用类是InputStreamOutputStream

    • 字符流 :用于处理文本数据,如ReaderWriter类。

    • 示例代码

      复制代码
      InputStream inputStream = new FileInputStream("input.txt");
      OutputStream outputStream = new FileOutputStream("output.txt");

    在这个例子中,我们分别创建了输入流和输出流来处理文件的读取和写入操作。


2. 文件的读取与写入操作(FileInputStream与FileOutputStream)

  • 文件读取

    使用FileInputStream可以从文件中读取数据,它是字节流的一种,用于处理二进制文件。

    • 示例代码

      复制代码
      try (FileInputStream fis = new FileInputStream("input.txt")) {
          int data;
          while ((data = fis.read()) != -1) {
              System.out.print((char) data);
          }
      } catch (IOException e) {
          e.printStackTrace();
      }

    在这里,我们通过FileInputStream读取文件内容,并逐字节打印到控制台。

  • 文件写入

    使用FileOutputStream可以将数据写入文件中,它是字节流的输出操作。

    • 示例代码

      复制代码
      try (FileOutputStream fos = new FileOutputStream("output.txt")) {
          String content = "Hello, Java I/O!";
          fos.write(content.getBytes());
      } catch (IOException e) {
          e.printStackTrace();
      }

    在这个例子中,我们将字符串写入到output.txt文件中,利用了getBytes()方法将字符串转换为字节数组。


3. 缓冲流与数据流的使用

  • 缓冲流

    缓冲流通过内部缓冲机制提高了I/O的效率。BufferedInputStreamBufferedOutputStream用于字节流,BufferedReaderBufferedWriter用于字符流。

    • 示例代码

      复制代码
      java
      ​
      ​
      复制代码
      try (BufferedReader reader = new BufferedReader(new FileReader("input.txt"))) {
          String line;
          while ((line = reader.readLine()) != null) {
              System.out.println(line);
          }
      } catch (IOException e) {
          e.printStackTrace();
      }

    在这里,我们使用BufferedReader来逐行读取文本文件,效率更高。

  • 数据流

    DataInputStreamDataOutputStream可以用于读写基本数据类型,如intfloat等。

    • 示例代码

      复制代码
      java
      ​
      ​
      复制代码
      try (DataOutputStream dos = new DataOutputStream(new FileOutputStream("data.txt"))) {
          dos.writeInt(42);
          dos.writeDouble(3.14);
      } catch (IOException e) {
          e.printStackTrace();
      }

    在这个例子中,我们通过DataOutputStream写入了一个整数和一个双精度数到文件中。


4. 对象序列化与反序列化

  • 序列化与反序列化的概念

    序列化是指将对象的状态转换为字节流的过程,而反序列化是指从字节流中恢复对象。Java提供了ObjectOutputStreamObjectInputStream用于对象的序列化和反序列化。

    • 示例代码

      复制代码
      try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("object.dat"))) {
          Person person = new Person("John", 30);
          oos.writeObject(person);
      } catch (IOException e) {
          e.printStackTrace();
      }

    这里,我们将一个Person对象序列化并保存到object.dat文件中。

  • 反序列化

    复制代码
    try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("object.dat"))) {
        Person person = (Person) ois.readObject();
        System.out.println(person);
    } catch (IOException | ClassNotFoundException e) {
        e.printStackTrace();
    }

    在这个例子中,我们从文件中读取了序列化的对象并将其还原为Person对象。


5. NIO中的文件操作

  • 什么是NIO?

    Java NIO(New I/O)是Java提供的一种新的I/O方式,支持非阻塞I/O操作。通过java.nio包中的类,Java开发者可以更高效地处理大规模文件操作。

    • 文件操作示例

      复制代码
      Path path = Paths.get("example.txt");
      // 写入文件
      Files.write(path, "Hello, NIO!".getBytes());
      // 读取文件
      List<String> lines = Files.readAllLines(path);
      lines.forEach(System.out::println);

    在这里,我们通过NIO中的Files类实现了文件的写入和读取操作,代码更加简洁。

相关推荐
勤奋的小王同学~18 分钟前
(javaEE初阶)计算机是如何组成的:CPU基本工作流程 CPU介绍 CPU执行指令的流程 寄存器 程序 进程 进程控制块 线程 线程的执行
java·java-ee
TT哇20 分钟前
JavaEE==网站开发
java·redis·java-ee
2401_8260976224 分钟前
JavaEE-Linux环境部署
java·linux·java-ee
QuantumStack1 小时前
【C++ 真题】P1104 生日
开发语言·c++·算法
缘来是庄1 小时前
设计模式之访问者模式
java·设计模式·访问者模式
whoarethenext1 小时前
使用 C++/OpenCV 和 MFCC 构建双重认证智能门禁系统
开发语言·c++·opencv·mfcc
Bug退退退1231 小时前
RabbitMQ 高级特性之死信队列
java·分布式·spring·rabbitmq
梵高的代码色盘2 小时前
后端树形结构
java
笑稀了的野生俊2 小时前
在服务器中下载 HuggingFace 模型:终极指南
linux·服务器·python·bash·gpu算力
Naiva2 小时前
【小技巧】Python+PyCharm IDE 配置解释器出错,环境配置不完整或不兼容。(小智AI、MCP、聚合数据、实时新闻查询、NBA赛事查询)
ide·python·pycharm