<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # 在 Java 中讀取文本文件 原文:http://zetcode.com/java/readtext/ 在 Java 中閱讀文本文件教程中,我們展示了如何在 Java 中閱讀文本文件。 我們使用內置工具,包括`FileReader`,`InputStreamReader`和`Scanner`。 另外,我們使用 API?? Google Guava 庫。 Google Guava 是 Java 的通用庫集; 該集合也包括 IO API。 以下示例使用此文本文件。 `src/resources/thermopylae.txt` ```java The Battle of Thermopylae was fought between an alliance of Greek city-states, led by King Leonidas of Sparta, and the Persian Empire of Xerxes I over the course of three days, during the second Persian invasion of Greece. ``` 該文件位于`src/resources/`目錄中。 ## Java `FileReader`類 我們可以使用以下 Java 類來讀取 Java 中的文本文件。 * `java.io.FileReader` * `java.nio.file.Files` * `java.util.Scanner` * `java.io.InputStreamReader` * `com.google.common.io.Files` ## Java 使用`FileReader`讀取文本文件 `FileReader`是用于讀取字符文件的類。 它使用默認緩沖區大小從字符文件中讀取文本。 從字節到字符的解碼使用指定的字符集或平臺的默認字符集。 > **注意**:過去,`FileReader`依賴于默認平臺的編碼。 從 Java 11 開始,此問題已得到糾正。 現在可以顯式指定編碼。 `com/zetcode/FileReaderEx.java` ```java package com.zetcode; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.nio.charset.StandardCharsets; public class FileReaderEx { public static void main(String[] args) throws IOException { var fileName = "src/resources/thermopylae.txt"; try (BufferedReader br = new BufferedReader( new FileReader(fileName, StandardCharsets.UTF_8))) { var sb = new StringBuilder(); String line; while ((line = br.readLine()) != null) { sb.append(line); sb.append(System.lineSeparator()); } System.out.println(sb); } } } ``` 該代碼示例從`thermopylae.txt`文件讀取文本。 ```java var fileName = "src/resources/thermopylae.txt"; ``` 在`fileName`變量中,我們存儲文件的路徑。 ```java try (BufferedReader br = new BufferedReader( new FileReader(fileName, StandardCharsets.UTF_8))) { ``` `FileReader`將文件名作為第一個參數。 第二個參數是使用的字符集。 `FileReader`傳遞給`BufferedReader`,后者緩沖讀取操作以獲得更好的性能。 這是一個`try-with-resources`語句,可確保在語句末尾關閉資源(緩沖的讀取器)。 ```java var sb = new StringBuilder(); String line; while ((line = br.readLine()) != null) { sb.append(line); sb.append(System.lineSeparator()); } System.out.println(sb); ``` 在控制臺上打印行會占用更多資源。 因此,我們使用`StringBuilder`構建輸出字符串并在一個操作中將其打印出來。 這是一個可選的優化。 `System.lineSeparator()`返回系統相關的行分隔符字符串。 ## Java 使用`Files.readAllLines`讀取文本文件 `Files.readAllLines()`方法從文件讀取所有行。 此方法可確保在讀取所有字節或引發異常后關閉文件。 使用指定的字符集將文件中的字節解碼為字符。 請注意,此方法將整個文件讀入內存。 因此,它可能不適用于非常大的文件。 `com/zetcode/ReadAllLinesEx.java` ```java package com.zetcode; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Paths; import java.util.List; public class ReadAllLinesEx { public static void main(String[] args) throws IOException { var fileName = "src/resources/thermopylae.txt"; List<String> lines = Files.readAllLines(Paths.get(fileName), StandardCharsets.UTF_8); for (String line : lines) { System.out.println(line); } } } ``` 使用`Files.readAllLines()`方法讀取`thermopylae.txt`文件的內容并將其打印到控制臺。 ## 使用 Java8 流 API 讀取文本文件 讀取文本文件的另一種方法是使用 Java8 流 API。 `Files.lines()`從文件中讀取所有行作為流。 使用`StandardCharsets.UTF-8`字符集將文件中的字節解碼為字符。 `com/zetcode/FilesLinesEx.java` ```java package com.zetcode; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; public class FilesLinesEx { public static void main(String[] args) throws IOException { var fileName = "src/resources/thermopylae.txt"; Files.lines(Paths.get(fileName)).forEachOrdered(System.out::println); } } ``` 使用`Files.lines()`方法讀取`thermopylae.txt`文件的內容并將其打印到控制臺。 ## Java 使用`Scanner`讀取文本文件 `Scanner`是簡單的文本掃描器,可以使用正則表達式解析原始類型和字符串。 `com/zetcode/ScannerEx.java` ```java package com.zetcode; import java.io.File; import java.io.FileNotFoundException; import java.util.Scanner; public class ScannerEx { public static void main(String[] args) throws FileNotFoundException { var fileName = "src/resources/thermopylae.txt"; try (var scanner = new Scanner(new File(fileName))) { while (scanner.hasNext()) { String line = scanner.nextLine(); System.out.println(line); } } } } ``` 該示例使用`Scanner`讀取文本文件。 ```java while (scanner.hasNext()) { String line = scanner.nextLine(); System.out.println(line); } ``` 使用`nextLine()`方法逐行讀取文件。 ## Java 使用`InputStreamReader`讀取文本文件 `InputStreamReader`是從字節流到字符流的橋梁。 它讀取字節,并使用指定的字符集將其解碼為字符。 `com/zetcode/InputStreamReaderEx.java` ```java package com.zetcode; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; public class InputStreamReaderEx { public static void main(String[] args) throws IOException { var fileName = "src/resources/thermopylae.txt"; try (var br = new BufferedReader(new InputStreamReader( new FileInputStream(fileName), StandardCharsets.UTF_8))) { String line; while ((line = br.readLine()) != null) { System.out.println(line); } } } } ``` 該示例使用`InputStreamReader`讀取文本文件。 ```java try (var br = new BufferedReader(new InputStreamReader( new FileInputStream(fileName), StandardCharsets.UTF_8))) { ``` `InputStreamReader`是從`FileInputStream`創建的,它通過打開與實際文件的連接來創建輸入流。 然后將`InputStreamReader`傳遞給`BufferedReader`,以提高效率。 Java 7 引入了更方便的 API 來與`InputStreamReader`一起使用。 可以使用`Files.newBufferedReader`創建新的緩沖`InputStreamReader`。 `com/zetcode/InputStreamReaderEx2.java` ```java package com.zetcode; import java.io.BufferedReader; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Paths; public class InputStreamReaderEx2 { public static void main(String[] args) throws IOException { var fileName = "src/resources/thermopylae.txt"; var filePath = Paths.get(fileName); try (BufferedReader br = Files.newBufferedReader( filePath, StandardCharsets.UTF_8)) { String line; while ((line = br.readLine()) != null) { System.out.println(line); } } } } ``` 該示例使用`Files.newBufferedReader()`方法讀取`thermopylae.txt`文件。 ## Java 使用`Files.readAllBytes`讀取文本文件 `Files.readAllBytes()`方法從文件讀取所有字節。 它確保在讀取所有字節后關閉文件。 `com/zetcode/ReadAllBytesEx.java` ```java package com.zetcode; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; public class ReadAllBytesEx { public static void main(String[] args) throws IOException { var fileName = "src/resources/thermopylae.txt"; var filePath = Paths.get(fileName); byte[] data = Files.readAllBytes(filePath); var content = new String(data); System.out.println(content); } } ``` 該示例從文件讀取所有字節,并將它們傳遞給`String`構造器。 ## Java 使用`Files.readString`讀取文本 Java 11 引入了一種方便的方法,該方法允許一次性將整個文件讀取為字符串。 `Files.readString`將文件中的所有內容讀取為字符串,并使用指定的或默認的(`StandardCharsets.UTF_8`)字符集將字節解碼為字符。 它確保在讀取所有內容后關閉文件。 `com/zetcode/ReadFileAsStringEx.java` ```java package com.zetcode; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; public class ReadFileAsStringEx { public static void main(String[] args) throws IOException { var fileName = "src/resources/thermopylae.txt"; var filePath = Paths.get(fileName); var content = Files.readString(filePath); System.out.println(content); } } ``` 該示例將`thermopylae.txt`文件的內容讀取為字符串,然后將其打印到終端。 ## Java 使用`FileChannel`讀取文本文件 `FileChannel`是用于讀取,寫入,映射和操作文件的通道。 文件通道的優點包括在文件的特定位置進行讀寫,加載文件的一部分或鎖定文件的一部分。 `com/zetcode/FileChannelEx.java` ```java package com.zetcode; import java.io.IOException; import java.io.RandomAccessFile; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; public class FileChannelEx { public static void main(String[] args) throws IOException { var fileName = "src/resources/thermopylae.txt"; try (RandomAccessFile myFile = new RandomAccessFile(fileName, "rw"); FileChannel inChannel = myFile.getChannel()) { ByteBuffer buf = ByteBuffer.allocate(48); int bytesRead = inChannel.read(buf); while (bytesRead != -1) { buf.flip(); while (buf.hasRemaining()) { System.out.print((char) buf.get()); } buf.clear(); bytesRead = inChannel.read(buf); } } } } ``` 該示例使用`FileChannel`讀取文本文件。 ```java try (RandomAccessFile myFile = new RandomAccessFile(fileName, "rw"); FileChannel inChannel = myFile.getChannel()) { ``` 從`RandomAccessFile`創建一個`FileChannle`。 ```java ByteBuffer buf = ByteBuffer.allocate(48); int bytesRead = inChannel.read(buf); ``` 我們分配一個緩沖區并讀取初始數據。 ```java while (bytesRead != -1) { buf.flip(); while (buf.hasRemaining()) { System.out.print((char) buf.get()); } buf.clear(); bytesRead = inChannel.read(buf); } ``` 我們將數據讀入緩沖區并將其寫入終端。 我們使用`flip()`將緩沖區從讀取更改為寫入。 ## 使用 Google Guava 讀取文本文件 Google Guava 是一個 Java 幫助程序庫,也具有 IO 工具。 如果要讀取的文件很大,則以下兩個 Guava 方法將消耗大量系統資源。 `pom.xml` ```java <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.zetcode</groupId> <artifactId>readtextguavaex</artifactId> <version>1.0-SNAPSHOT</version> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>12</maven.compiler.source> <maven.compiler.target>12</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>28.0-jre</version> </dependency> </dependencies> </project> ``` 這是 Maven POM 文件。 `com/zetcode/ReadTextGuavaEx.java` ```java package com.zetcode; import com.google.common.base.Charsets; import com.google.common.io.Files; import java.io.File; import java.io.IOException; import java.util.List; public class ReadTextGuavaEx { public static void main(String[] args) throws IOException { var fileName = "src/main/resources/thermopylae.txt"; List<String> lines = Files.readLines(new File(fileName), Charsets.UTF_8); var sb = new StringBuilder(); for (String line: lines) { sb.append(line); sb.append(System.lineSeparator()); } System.out.println(sb); } } ``` 在示例中,我們使用`Files.readLines()`方法從文件中讀取所有行。 該方法返回字符串列表。 將默認字符集指定為第二個參數。 在第二個示例中,我們使用`Files.asCharSource()`。 `com/zetcode/ReadTextGuavaEx2.java` ```java package com.zetcode; import com.google.common.base.Charsets; import com.google.common.io.Files; import java.io.File; import java.io.IOException; public class ReadTextGuavaEx2 { public static void main(String[] args) throws IOException { var fileName = "src/main/resources/thermopylae.txt"; var charSource = Files.asCharSource(new File(fileName), Charsets.UTF_8).read(); System.out.println(charSource); } } ``` `Files.asCharSource()`用于使用給定的字符集從給定的文件讀取字符數據。 它的`read()`方法以字符串形式讀取此源的內容。 在本文中,我們已經用 Java 的各種方式讀取了文本文件。 您可能也對以下相關教程感興趣: [Java 列表目錄內容](/articles/javalistdirectory/), [Java `FileOutputStream`教程](/java/fileoutputstream/),[用 Java 復制文件](/java/copyfile/), [Java 教程](/lang/java/),[使用 Java8 的`StringJoiner`連接字符串](/articles/java8stringjoiner/) ,[Java 網頁讀取](/articles/javareadwebpage/)或 [Google Guava 簡介](/articles/guava/)。 列出[所有 Java 教程](/all/#java)。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看