第五章: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类实现了文件的写入和读取操作,代码更加简洁。

相关推荐
渣哥43 分钟前
原来 Java 里线程安全集合有这么多种
java
间彧1 小时前
Spring Boot集成Spring Security完整指南
java
间彧1 小时前
Spring Secutiy基本原理及工作流程
java
数据智能老司机2 小时前
精通 Python 设计模式——创建型设计模式
python·设计模式·架构
Java水解2 小时前
JAVA经典面试题附答案(持续更新版)
java·后端·面试
数据智能老司机3 小时前
精通 Python 设计模式——SOLID 原则
python·设计模式·架构
c8i4 小时前
django中的FBV 和 CBV
python·django
c8i4 小时前
python中的闭包和装饰器
python
洛小豆4 小时前
在Java中,Integer.parseInt和Integer.valueOf有什么区别
java·后端·面试
前端小张同学5 小时前
服务器上如何搭建jenkins 服务CI/CD😎😎
java·后端