原文:http://zetcode.com/java/inputstreamreader/
Java InputStreamReader教程显示了如何使用 Java InputStreamReader来读取 Java 中的文本。
Java InputStreamReader
JavaInputStreamReader是字节流和字符流之间的桥梁。 它读取字节,并使用指定的字符集将其解码为字符。
建议将InputStreamReader包裹在BufferedReader中以获得最佳效率。
请注意,在 Java 中使用字符流时,应避免使用依赖于默认编码的流,例如FileReader或PrintWriter。
Java InputStreamReader文件流
在第一个示例中,我们使用InputStreamReader从文件流中读取文本。
russiantext.txt
Пе́рвая мирова́я война́ (28 июля 1914 — 11 ноября 1918) — одиниз самых широкомасштабных вооружённых конфликтов в истории человечества.Формальным поводом к войне послужили события в Сараеве,где 28 июня 1914 года девятнадцатилетний боснийский серб, студентГаврило Принцип осуществил покушение, в результате которого был убитавстрийский эрцгерцог Франц Фердинанд и его морганатическая жена София Хотек.
我们有西里尔文文字。
JavaInputStreamReaderEx.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.Charset;import java.nio.charset.StandardCharsets;public class JavaInputStreamReaderEx {public static void main(String[] args) throws FileNotFoundException, IOException {String fileName = "src/main/resources/russiantext.txt";try (FileInputStream fis = new FileInputStream(fileName);InputStreamReader isr = new InputStreamReader(fis,StandardCharsets.UTF_8);BufferedReader br = new BufferedReader(isr)) {String line;while ((line = br.readLine()) != null) {System.out.println(line);}}}}
该示例读取位于src/main/resources目录中的俄语小文本。
try (FileInputStream fis = new FileInputStream(fileName);InputStreamReader isr = new InputStreamReader(fis, StandardCharsets.UTF_8);BufferedReader br = new BufferedReader(isr)) {
FileInputStream用于创建文件流。 FileInputStream包装在InputStreamReader中,用于读取文本数据。 我们设置StandardCharsets.UTF_8编码。 最后,为了获得最佳效率,将InputStreamReader包装到BufferedReader中。
Java InputStreamReader标准输入流
第二个示例使用InputStreamReader从标准输入流读取文本。
JavaInputStreamReaderEx2.java
package com.zetcode;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.nio.charset.StandardCharsets;public class JavaInputStreamReaderEx2 {public static void main(String[] args) throws IOException {try (BufferedReader bin= new BufferedReader(new InputStreamReader(System.in,StandardCharsets.UTF_8))) {String line;System.out.print("Give me a cookie: ");while (!(("cookie").equals(line = bin.readLine()))) {System.out.println(line);System.out.print("Give me a cookie: ");}}}}
该示例显示提示并等待用户的响应。 程序在收到正确的输入后结束。
try (BufferedReader bin= new BufferedReader(new InputStreamReader(System.in))) {
我们使用System.in从标准输入中读取。
Java InputStreamReader URL 流
下面的示例使用InputStreamReader从网络流中读取文本。
JavaInputStreamReaderEx3.java
package com.zetcode;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.net.MalformedURLException;import java.net.URL;import java.nio.charset.StandardCharsets;public class JavaInputStreamReaderEx3 {public static void main(String[] args) throws MalformedURLException, IOException {StringBuilder sb;URL url = new URL("http://www.something.com");try (InputStreamReader isr = new InputStreamReader(url.openStream(),StandardCharsets.UTF_8);BufferedReader br = new BufferedReader(isr)) {String line;sb = new StringBuilder();while ((line = br.readLine()) != null) {sb.append(line);sb.append(System.lineSeparator());}}System.out.println(sb.toString());}}
该示例从网站读取文本。
try (InputStreamReader isr = new InputStreamReader(url.openStream(),StandardCharsets.UTF_8);BufferedReader br = new BufferedReader(isr)) {
该示例从指定的 URL 打开流。 它从something.com网页读取 HTML 代码。
下一个示例调用 Alexa Web 服务来确定网站的排名。
JavaInputStreamReaderEx4.java
package com.zetcode;import java.io.IOException;import java.io.InputStream;import java.net.MalformedURLException;import java.net.URL;import java.net.URLConnection;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.parsers.ParserConfigurationException;import org.w3c.dom.Document;import org.w3c.dom.Element;import org.w3c.dom.NodeList;import org.xml.sax.SAXException;public class JavaInputStreamReaderEx4 {public static void main(String[] args) throws MalformedURLException,IOException, ParserConfigurationException, SAXException {String webSite = "www.something.com";int ranking = 0;String url = String.format("http://data.alexa.com/data?cli=10&url=%s",webSite);URLConnection conn = new URL(url).openConnection();try (InputStream is = conn.getInputStream()) {DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();Document doc = builder.parse(is);Element element = doc.getDocumentElement();NodeList nodeList = element.getElementsByTagName("POPULARITY");if (nodeList.getLength() > 0) {Element elementAttribute = (Element) nodeList.item(0);ranking = Integer.valueOf(elementAttribute.getAttribute("TEXT"));}}System.out.printf("Ranking of %s: %d%n", webSite, ranking);}}
该示例接收 XML 输入,并使用 Java DOM 解析器对其进行解析。
NodeList nodeList = element.getElementsByTagName("POPULARITY");if (nodeList.getLength() > 0) {Element elementAttribute = (Element) nodeList.item(0);ranking = Integer.valueOf(elementAttribute.getAttribute("TEXT"));}
该排名在POPULARITY标签的TEXT属性中可用。
在本教程中,我们展示了如何使用 Java InputStreamReader来读取 Java 中的文本。 您可能也对相关教程感兴趣: Java FileInputStream教程, Java InputStream教程,用 Java 阅读文本文件, Jsoup 教程 和 Java 教程。
