Java中FileInputStream和FileReader的区别


在使用 Java 进行文件输入时,工程师经常会遇到两个常用的类:FileInputStream 和 FileReader。这两个类都用于从文件中读取信息,但它们在方法和使用场景上有所不同。在本文中,我们将探讨 FileInputStream 和 FileReader 之间的区别、它们的语法结构以及各自的代码示例。

语法

FileInputStream

FileInputStream inputStream = new FileInputStream("file.txt");

FileReader

FileReader fileReader = new FileReader("file.txt");

语法解释

FileInputStream

FileInputStream 类用于从文件中读取二进制数据。它以文件路径作为参数,并创建一个用于从指定文件读取数据的流。

FileReader

另一方面,FileReader 类用于从文件中读取字符数据。它也以文件路径作为参数,并创建一个用于从指定文件读取字符数据的读取器。

方法 1:FileInputStream

FileInputStream 类主要用于读取二进制数据,例如图像、音频文件或任何其他非文本数据。以下是使用 FileInputStream 的算法:

算法

  • 通过提供文件路径创建 FileInputStream 实例。

  • 创建一个缓冲区或字节数组来保存从文件中读取的数据。

  • 使用 FileInputStream 的 read() 方法将数据从文件读取到缓冲区/数组中。

  • 根据需要处理数据。

  • 使用 close() 方法关闭 FileInputStream 以释放系统资源。

示例

import java.io.FileInputStream;
import java.io.IOException;

public class FileInputStreamExample {
   public static void main(String[] args) {
      try {
         FileInputStream inputStream = new FileInputStream("file.txt");
         byte[] buffer = new byte[1024];
         int bytesRead = inputStream.read(buffer);
         while (bytesRead != -1) {
            String data = new String(buffer, 0, bytesRead);
            System.out.print(data);
            bytesRead = inputStream.read(buffer);
         }
         inputStream.close();
      } catch (IOException e) {
         e.printStackTrace();
      }
   }
}

输出

Hello, World!
This is a sample text file.
It contains some text for demonstration purposes.
Feel free to modify or replace this content as needed.

在本例中,我们使用文件路径 "file.txt" 创建了一个 FileInputStream 实例。然后,我们创建一个名为 "buffer" 的字节数组来存储从文件中读取的数据。read() 方法用于将数据读取到缓冲区中,我们根据需要处理数据。read() 方法返回读取的字节数,如果返回 -1,则表示文件结束。最后,我们关闭 FileInputStream 以释放系统资源。

方法 2:FileReader

FileReader 类专门用于从文件中读取基于字符的数据,例如文本文件。以下是使用 FileReader 的算法:

算法

  • 通过提供文件路径创建 FileReader 实例。

  • 创建一个缓冲区或字符数组来保存从文件中读取的数据。

  • 使用 FileReader 的 read() 方法将数据从文件读取到缓冲区/数组中。

  • 根据需要处理数据。

  • 使用 close() 方法关闭 FileReader 以释放系统资源。

示例

import java.io.FileReader;
import java.io.IOException;

public class FileReaderExample {
   public static void main(String[] args) {
      try {
         FileReader fileReader = new FileReader("file.txt");
         char[] buffer = new char[1024];
         int charsRead = fileReader.read(buffer);
         while (charsRead != -1) {
            String data = new String(buffer, 0, charsRead);
            System.out.print(data);
            charsRead = fileReader.read(buffer);
         }
         fileReader.close();
      } catch (IOException e) {
         e.printStackTrace();
      }
   }
}

输出

Hello, World!
This is a sample text file.
It contains some text for demonstration purposes.
Feel free to modify or replace this content as needed.

在本例中,我们使用文件路径 "file.txt" 创建了一个 FileReader 实例。然后,我们创建一个名为 "buffer" 的字符数组来存储从文件中读取的数据。read() 方法用于将数据读取到缓冲区中,我们根据需要处理数据。read() 方法返回读取的字符数,如果返回 -1,则表示文件结束。最后,我们关闭 FileReader 以释放系统资源。

Java中FileInputStream和FileReader的区别

属性

FileInputStream

FileReader

用途

用于读取二进制数据

用于读取字符数据

数据

以字节形式读取数据

以字符形式读取数据

编码

没有内置编码支持

支持编码转换

用法

适用于非文本数据

适用于文本数据

性能

读取二进制数据速度更快

读取大型文件或非文本数据速度较慢

结论

总之,FileInputStream 和 FileReader 都是 Java 中用于从文件读取数据的宝贵类,但它们具有不同的用途,并且在完全不同的场景中使用。FileInputStream 适用于读取二进制数据,而 FileReader 非常适合读取基于字符的信息,例如文本文件。通过了解它们之间的区别和适当的使用场景,开发人员可以在使用 Java 进行文件输入时做出明智的决策。

更新于: 2023年7月28日

693 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告