Java InputStreamReader
上次修改时间:2024 年 3 月 3 日
在本文中,我们将展示如何使用 Java InputStreamReader 在 Java 中读取文本。
JavaInputStreamReader 是字节流和字符流之间的桥梁。 它读取字节,并使用指定的字符集将它们解码为字符。
建议将 InputStreamReader 封装在 BufferedReader 中,以获得最佳效率。
请注意,在 Java 中处理字符流时,我们应该避免使用依赖于默认编码的流,例如 FileReader 或 PrintWriter。
从 FileInputStream 读取
在第一个示例中,我们使用 InputStreamReader 从文件流中读取文本。
russian-text.txt
Пе́рвая мирова́я война́ (28 июля 1914 — 11 ноября 1918) — один из самых широкомасштабных вооружённых конфликтов в истории человечества. Формальным поводом к войне послужили события в Сараеве, где 28 июня 1914 года девятнадцатилетний боснийский серб, студент Гаврило Принцип осуществил покушение, в результате которого был убит австрийский эрцгерцог Франц Фердинанд и его морганатическая жена София Хотек.
我们有一段西里尔文的文本。
Main.java
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
void main() throws Exception {
String fileName = "russian-text.txt";
try (var fis = new FileInputStream(fileName);
var isr = new InputStreamReader(fis, StandardCharsets.UTF_8);
var br = new BufferedReader(isr)) {
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
}
}
该示例读取一段俄语文本。
try (var fis = new FileInputStream(fileName);
var isr = new InputStreamReader(fis, StandardCharsets.UTF_8);
var br = new BufferedReader(isr)) {
使用 FileInputStream 创建文件流。 FileInputStream 被封装到 InputStreamReader 中以读取文本数据。 我们设置 StandardCharsets.UTF_8 编码。 最后,InputStreamReader 被封装到 BufferedReader 中以获得最佳效率。
从标准输入流读取
第二个示例使用 InputStreamReader 从标准输入流中读取文本。
Main.java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
void main() throws IOException {
try (var br = new BufferedReader(new InputStreamReader(System.in,
StandardCharsets.UTF_8))) {
String line;
System.out.print("Give me a cookie: ");
while (!(("cookie").equals(line = br.readLine()))) {
System.out.println(line);
System.out.print("Give me a cookie: ");
}
}
}
该示例打印一个提示,并等待用户的响应。 当程序接收到正确的输入时,程序结束。
try (var br = new BufferedReader(new InputStreamReader(System.in,
StandardCharsets.UTF_8))) {
我们使用 System.in 从标准输入读取。
从 URL 流读取
以下示例使用 InputStreamReader 从网络流读取文本。
Main.java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URI;
import java.nio.charset.StandardCharsets;
void main() throws IOException {
var url = URI.create("https://www.webcode.me").toURL();
try (var isr = new InputStreamReader(url.openStream(), StandardCharsets.UTF_8);
var br = new BufferedReader(isr)) {
String line;
var sb = new StringBuilder();
while ((line = br.readLine()) != null) {
sb.append(line);
sb.append(System.lineSeparator());
}
System.out.println(sb.toString());
}
}
该示例从网站读取文本。
try (var isr = new InputStreamReader(url.openStream(), StandardCharsets.UTF_8);
var br = new BufferedReader(isr)) {
该示例从指定的 URL 打开一个流。 它从 webcode.me 网页读取 HTML 代码。
来源
在本文中,我们展示了如何使用 Java InputStreamReader 在 Java 中读取文本。
作者
列出所有Java教程。