讓我們首先討論它們,以便理解並通過示例來解釋差異。首先我們將討論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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。