原文:http://zetcode.com/java/fileinputstream/
Java FileInputStream
教程显示了如何使用FileInputStream
类读取 Java 中的文件。
Java FileInputStream
FileInputStream
从文件系统中的文件读取输入字节。
Java FileInputStream
构造器
这些是FileInputStream
构造器:
FileInputStream(File file)
- 创建文件输入流以从File
对象读取。FileInputStream(String name)
- 创建文件输入流以从指定的文件名读取。FileInputStream(FileDescriptor fdObj)
- 创建从指定文件描述符读取的文件输入。
Java FileInputStream
关闭
FileInputStream
的close()
方法关闭文件输入流,并释放与此流关联的所有系统资源。 在我们的示例中,我们使用try-with-resources
语句,该语句确保在语句末尾关闭每个资源。
Java FileInputStream
读取
FileInputStream
使用以下读取方法读取字节:
read(byte[] b)
-从此输入流中读取最多b.length
个字节的数据到一个字节数组中。read(byte[] b, int off, int len)
-从此输入流中读取最多len
个字节的数据到一个字节数组中。read()
-从文件输入流中读取一个字节。
Java FileInputStream
读取字符
以下示例使用FileInputStream
从文件中读取三个字符。
FileInputStreamEx.java
package com.zetcode;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class FileInputStreamEx {
public static void main(String[] args) throws FileNotFoundException, IOException {
String fileName = "/home/janbodnar/tmp/smallfile.txt";
try (FileInputStream fis = new FileInputStream(fileName)) {
char c1 = (char) fis.read();
char c2 = (char) fis.read();
char c3 = (char) fis.read();
System.out.println(c1);
System.out.println(c2);
System.out.println(c3);
}
}
}
该代码示例使用read()
读取三个字符。
char c1 = (char) fis.read();
我们用read()
读取一个字符,并将该值转换为char
。
System.out.println(c1);
字符被打印到控制台。
Java FileInputStream
按字符读取文件
如果到达文件末尾,则read()
方法返回 -1。 通过while
循环,我们可以逐字符读取整个文件。 请注意,这种方式不是很有效。
FileInputStreamEx2.java
package com.zetcode;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class FileInputStreamEx2 {
public static void main(String[] args) throws FileNotFoundException, IOException {
String fileName = "/home/janbodnar/tmp/smallfile.txt";
try (FileInputStream fis = new FileInputStream(fileName)) {
int i;
while ((i = fis.read()) != -1) {
System.out.print((char) i);
}
}
System.out.println();
}
}
该示例读取文件的内容并将其写入终端。
while ((i = fis.read()) != -1) {
System.out.print((char) i);
}
在while
循环中,我们从FileInputStream
读取字符,直到read()
方法返回 -1。
Java FileInputStream
通过文本块读取文件
按数据块读取文件更有效; 例如每个方法调用中 1024 个字节。
FileInputStreamEx3.java
package com.zetcode;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
public class FileInputStreamEx3 {
public static void main(String[] args) throws FileNotFoundException, IOException {
String fileName = "/home/janbodnar/tmp/bigfile.txt";
try (FileInputStream fis = new FileInputStream(fileName)) {
int i = 0;
do {
byte[] buf = new byte[1024];
i = fis.read(buf);
String value = new String(buf, StandardCharsets.UTF_8);
System.out.print(value);
} while (i != -1);
}
}
}
在此示例中,我们通过数据块读取文件
byte[] buf = new byte[1024];
我们从文件中读取数据到此字节数组中。
i = fis.read(buf);
read()
方法从此流中最多读取b.length
个字节的数据到提供的字节数组中。
String value = new String(buf, StandardCharsets.UTF_8);
从字节数组中,我们创建一个String
。
使用BufferedReader
的 Java FileInputStream
使用BufferedReader
可以提高阅读效率。 BufferedReader
从字符输入流中读取文本,缓冲字符,以便有效读取字符。
FileInputStreamEx4.java
package com.zetcode;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
public class FileInputStreamEx4 {
public static void main(String[] args) throws FileNotFoundException, IOException {
String fileName = "/home/janbodnar/tmp/bigfile.txt";
try (BufferedReader br = new BufferedReader(new InputStreamReader(
new FileInputStream(fileName), StandardCharsets.UTF_8));) {
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
}
System.out.println();
}
}
该示例使用缓冲技术读取大文件,以提高效率。
while ((line = br.readLine()) != null) {
readLine()
方法从缓冲区读取一行文本。
在本教程中,我们介绍了 Java FileInputStream
类。 您可能也对相关教程感兴趣: Java FileOutputStream
教程, Java InputStreamReader
教程, Java InputStream
教程, Java 谓词教程, Java 文件时间, Java 附加到文件,用 Java 读取文本文件和 Java 教程。