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

相关推荐
yueqingll15 分钟前
020、二级Java选择题综合知识点(持续更新版)
java·开发语言
数云界16 分钟前
使用 VSCode 在 Python 中创建项目环境
ide·vscode·python
m0_6085709819 分钟前
vscode对python进行多卡调试
ide·vscode·python
zhang-ge31 分钟前
python提取pdf表格到excel:拆分、提取、合并
python·pdf·excel
计算机学姐32 分钟前
基于python+django+vue的在线学习资源推送系统
开发语言·vue.js·python·学习·django·pip·web3.py
A洛34 分钟前
Cloudflare Pages 部署 Next.js 应用教程
开发语言·github·nextjs·cloudflare·cloudflarepages
lly20240639 分钟前
Rust 函数
开发语言
许野平42 分钟前
Rust:深入浅出说一说 Error 类型
java·开发语言·rust·error
吃什么芹菜卷1 小时前
2024.9最新:CUDA安装,pytorch库安装
人工智能·pytorch·笔记·python·深度学习
jingling5551 小时前
后端开发刷题 | 数字字符串转化成IP地址
java·开发语言·javascript·算法