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 进行文件输入时做出明智的决策。