Java讀取文本文件的各種方法
前言:
有多種寫入和讀取文本文件的方法。這在處理許多應(yīng)用程序時(shí)是必需的。在 Java
中有多種方法可以讀取純文本文件,例如你可以使用FileReader
、BufferedReader
或Scanner
來讀取文本文件。每個(gè)實(shí)用程序都提供了一些特殊的東西,例如 BufferedReader
為快速讀取提供數(shù)據(jù)緩沖,而 Scanner
提供解析能力。
1、方法
- 使用
BufferedReader
類 - 使用
Scanner
類 - 使用文件閱讀器類
- 讀取列表中的整個(gè)文件
- 將文本文件讀取為字符串
我們還可以同時(shí)使用 BufferReader
和 Scanner
在 Java
中逐行讀取文本文件。然后 Java SE 8
引入了另一個(gè) Stream
類java.util.stream.Stream
,它提供了一種惰性且更有效的方式來讀取文件。
讓我們更深入地討論上述每個(gè)方法,最重要的是通過一個(gè)干凈的 Java
程序?qū)崿F(xiàn)它們。?
方法一、 使用BufferedReader類
此方法從字符輸入流中讀取文本。它確實(shí)緩沖以有效讀取字符、數(shù)組和行??梢灾付ň彌_區(qū)大小,也可以使用默認(rèn)大小。對(duì)于大多數(shù)用途,默認(rèn)值足夠大。通常,Reader
發(fā)出的每個(gè)讀取請(qǐng)求都會(huì)導(dǎo)致對(duì)底層字符或字節(jié)流發(fā)出相應(yīng)的讀取請(qǐng)求。因此,建議將 BufferedReader
包裝在任何 read()
操作可能代價(jià)高昂的 Reader
周圍,例如 FileReaders
和 InputStreamReaders
,如下所示:
BufferedReader in = new BufferedReader(Reader in, int size);
例子:
import java.io.*; public class HY { public static void main(String[] args) throws Exception { File file = new File( "C:\\Users\\pankaj\\Desktop\\test.txt"); BufferedReader br = new BufferedReader(new FileReader(file)); String st; while ((st = br.readLine()) != null) System.out.println(st); } }
輸出:
如果你想學(xué)習(xí)編程可以參考海擁的博客
方法二、使用 FileReader 類
讀取字符文件的便利類。此類的構(gòu)造函數(shù)假定默認(rèn)字符編碼和默認(rèn)字節(jié)緩沖區(qū)大小是合適的。
該類中定義的構(gòu)造函數(shù)如下:
FileReader(File file):
給定要讀取的文件,創(chuàng)建一個(gè)新的FileReader
FileReader(FileDescriptor fd):
創(chuàng)建一個(gè)新的FileReader
,給定要從中讀取的FileDescriptor
FileReader(String fileName):
創(chuàng)建一個(gè)新的FileReader
,給出要讀取的文件名
例子:
import java.io.*; public class GFG { public static void main(String[] args) throws Exception { FileReader fr = new FileReader( "C:\\Users\\pankaj\\Desktop\\test.txt"); int i; while ((i = fr.read()) != -1) System.out.print((char)i); } }
輸出:
如果你想學(xué)習(xí)編程可以參考海擁的博客
方法三、使用 Scanner 類
一個(gè)簡(jiǎn)單的文本掃描器,可以使用正則表達(dá)式解析原始類型和字符串。Scanner
使用分隔符模式將其輸入分解為標(biāo)記,默認(rèn)情況下與空格匹配。然后可以使用各種 next
方法將結(jié)果令牌轉(zhuǎn)換為不同類型的值。
示例 1: 使用循環(huán)
import java.io.File; import java.util.Scanner; public class ReadFromFileUsingScanner { public static void main(String[] args) throws Exception{ File file = new File("C:\\Users\\pankaj\\Desktop\\test.txt"); Scanner sc = new Scanner(file); while (sc.hasNextLine()) System.out.println(sc.nextLine()); } }
輸出:
如果你想學(xué)習(xí)編程可以參考海擁的博客
示例 2: 不使用循環(huán)
import java.io.File; import java.io.FileNotFoundException; import java.util.Scanner; public class ReadingEntireFileWithoutLoop{ public static void main(String[] args) throws FileNotFoundException{ File file = new File("C:\\Users\\pankaj\\Desktop\\test.txt"); Scanner sc = new Scanner(file); sc.useDelimiter("\\Z"); System.out.println(sc.next()); } }
輸出:
如果你想學(xué)習(xí)編程可以參考海擁的博客
方法四、讀取列表中的整個(gè)文件
從文件中讀取所有行。此方法可確保在讀取所有字節(jié)或拋出 I/O
錯(cuò)誤或其他運(yùn)行時(shí)異常時(shí)關(guān)閉文件。使用指定的字符集將文件中的字節(jié)解碼為字符。?
2、語法
public static List readAllLines(Path path,Charset cs)throws IOException
此方法將以下內(nèi)容識(shí)別為行終止符:?
\u000D 后跟 \u000A,回車后跟換行符 \u000A,換行 \u000D,回車
例子:
import java.util.*; import java.nio.charset.StandardCharsets; import java.nio.file.*; import java.io.*; public class ReadFileIntoList{ public static List<String> readFileInList(String fileName){ List<String> lines = Collections.emptyList(); try{ lines = Files.readAllLines(Paths.get(fileName), StandardCharsets.UTF_8); } catch (IOException e){ e.printStackTrace(); } return lines; } public static void main(String[] args){ List l = readFileInList("C:\\Users\\pankaj\\Desktop\\test.java"); Iterator<String> itr = l.iterator(); while (itr.hasNext()) System.out.println(itr.next()); } }
輸出:
如果你想學(xué)習(xí)編程可以參考海擁的博客
方法五、將文本文件讀取為字符串
例子:
package io; import java.nio.file.*;; public class ReadTextAsString { public static String readFileAsString(String fileName)throws Exception{ String data = ""; data = new String(Files.readAllBytes(Paths.get(fileName))); return data; } public static void main(String[] args) throws Exception{ String data = readFileAsString("C:\\Users\\pankaj\\Desktop\\test.java"); System.out.println(data); } }
輸出:
如果你想學(xué)習(xí)編程可以參考海擁的博客
到此這篇關(guān)于Java讀取文本文件的各種方法的文章就介紹到這了,更多相關(guān)Java讀取文本文件方法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring中使用Hystrix實(shí)現(xiàn)熔斷詳解
這篇文章主要介紹了Java中使用Hystrix實(shí)現(xiàn)熔斷詳解,對(duì)于第一個(gè)問題,查看hystrix源碼可以看到,如果有緩存配置是優(yōu)先使用的緩存的,因此如果配置更新,必須要更新緩存,不能使用Hystrix.reset()方法來更新緩存,需要的朋友可以參考下2023-12-12淺談web服務(wù)器項(xiàng)目中request請(qǐng)求和response的相關(guān)響應(yīng)處理
這篇文章主要介紹了淺談web服務(wù)器項(xiàng)目中request請(qǐng)求和response的相關(guān)響應(yīng)處理,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07Java中java.lang.ClassCastException異常原因及解決方法
大家好,本篇文章主要講的是Java中java.lang.ClassCastException異常原因及解決方法,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下2022-01-01基于spring?data?jpa?@query返回map的踩坑記錄
這篇文章主要介紹了基于spring?data?jpa?@query返回map的踩坑記錄,具有很好的參考價(jià)值,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11解決IDEA開發(fā)工具右側(cè)沒有Maven工具欄的問題
這篇文章主要給大家解決了IDEA開發(fā)工具右側(cè)沒有Maven工具欄的問題,文中有詳細(xì)的解決步驟,如果有遇到一樣問題的小伙伴,可以參考閱讀本文2023-09-09淺談SpringMVC請(qǐng)求映射handler源碼解讀
這篇文章主要介紹了淺談SpringMVC請(qǐng)求映射handler源碼解讀,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03