让我们首先讨论它们,以便理解并通过示例来解释差异。首先我们将讨论FileReader 类。所以java中以FileReader class开头用于从文件中读取数据。它以字节格式返回数据,如 FileInputStream class 。它是一个character-oriented类,用于java中的文件处理。该类继承自 InputStreamReader class。 FileReader 用于读取字符流。
句法:
使用文件名创建
FileReader input = new FileReader(String name);
使用文件对象创建
FileReader input = new FileReader(File fileObj);
执行:
让我们考虑一个示例文件,其中我们使用 Java FileReader 类从文本文件 Gfg.txt 读取数据。我们假设文件中有以下数据,即 “Gfg.txt” 文件,如下所示:
Welcome to GeeksForGeeks.
示例
Java
// Java Program to Illustrate FileReader class
// Importing class
import java.io.FileReader;
// Main class
// FileReaderExample
public class GFG {
// Main driver method
public static void main(String args[]) throws Exception
{
// Creating an object of FileReader class to
// read content from file in local directory
FileReader fr = new FileReader("C:\\Gfg.txt");
int i;
// Reads from the file
while ((i = fr.read()) != -1) {
// Printing the content inside the file
System.out.print((char)i);
}
// Closing the connections to
// avoid memory space
fr.close();
}
}
输出:
Welcome to GeeksForGeeks
现在讨论第二种方法,即通过 FileInputStream 类。它存在于同一个包中,即java.io,它从文件中检索字节。它用于读取面向字节的数据(原始字节流),例如图像数据、音频和视频。您还可以从字符流中读取数据。但是,建议使用 FileReader 类来读取字符流。
用法:
使用文件路径创建
FileInputStream input = new FileInputStream(stringPath);
使用文件对象创建
FileInputStream input = new FileInputStream(File fileObject);
Note: Before running the code, a text file named “Gfg.txt” is required to be created. In this file, we are having the following content: “Welcome to GeeksForGeeks”
示例
Java
// Java Program to Illustrate FileInputStream class
// Importing class from java.io package
import java.io.FileInputStream;
// Main class
public class GFG {
// Main driver method
public static void main(String args[])
{
// Try block to check for exceptions
try {
// Creating an object of FileInputStream class
// in main() body to get file
FileInputStream input
= new FileInputStream("Gfg.txt");
// Display message only
System.out.println("Data in the file: ");
// Reading the first byte
int i = input.read();
while (i != -1) {
System.out.print((char)i);
// Reads next byte from the file using
// next() method
i = input.read();
}
// Closing the file
input.close();
}
// Catch block to handle the exceptions
catch (Exception e) {
// Print the exception on the console
System.out.println(e);
}
}
}
输出:
Data in the file: Welcome to GeeksForGeeks
现在,在了解了它们之后,让我们总结一下它们之间的差异,如下表格式所示。
FileInputStream |
FileReader |
---|---|
Stream是一个基于字节的对象,可以读取和写入字节。 | Reader 是基于字符的,它可用于读取或写入字符。 |
FileInputStream是基于字节的,它可用于读取字节。 | FileReader是基于字符的,它可以用来读取字符。 |
Stream用于二进制输入/输出 | Reader用于字符输入/输出 |
FileInputStream用于读取二进制文件。 | FileReader 用于读取平台默认编码的文本文件。 |
序列化和DeSerialization可以使用FileInputStream和ObjectInputStream来完成,序列化的对象可以保存到文件中。序列化将对象转换为字节流,反序列化将其转换回对象。 | FileReader 不用于序列化和反序列化,因为它读取字符而不是字节。 |
FileInputStream 是 InputStream 类的后代。 | FileReader 继承自 Reader 类 |
read()方法FileInputStream 可以一次读取一个字节,也可以读取字节数组中的多个字节。 | read()方法FileReader 可以一次读取一个字符,也可以将多个字符读入数组 |
相关用法
- Java FileInputStream和ObjectInputStream的区别用法及代码示例
- Java FileInputStream available()用法及代码示例
- Java FileInputStream close()用法及代码示例
- Java FileInputStream finalize()用法及代码示例
- Java FileInputStream getChannel()用法及代码示例
- Java FileInputStream getFD()用法及代码示例
- Java FileInputStream skip()用法及代码示例
- Java FileInputStream read()用法及代码示例
- Java FileDescriptor sync()用法及代码示例
- Java FileDescriptor valid()用法及代码示例
- Java FileOutputStream close()用法及代码示例
- Java FileOutputStream finalize()用法及代码示例
- Java FileOutputStream getChannel()用法及代码示例
- Java FileOutputStream getFD()用法及代码示例
- Java FilePermission equals()用法及代码示例
- Java FilePermission getActions()用法及代码示例
- Java FilePermission hashCode()用法及代码示例
- Java FilePermission implies()用法及代码示例
- Java FilePermission newPermissionCollection()用法及代码示例
- Java File canExecute()用法及代码示例
- Java File canRead()用法及代码示例
- Java File canWrite()用法及代码示例
- Java File createNewFile()用法及代码示例
- Java File createTempFile()用法及代码示例
- Java File delete()用法及代码示例
注:本文由纯净天空筛选整理自sanketnagare大神的英文原创作品 Difference Between FileInputStream and FileReader in Java。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。