当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Java FileInputStream和FileReader的区别用法及代码示例


让我们首先讨论它们,以便理解并通过示例来解释差异。首先我们将讨论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 可以一次读取一个字符,也可以将多个字符读入数组


相关用法


注:本文由纯净天空筛选整理自sanketnagare大神的英文原创作品 Difference Between FileInputStream and FileReader in Java。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。