Java讀取文本文件的各種方法
前言:
有多種寫(xiě)入和讀取文本文件的方法。這在處理許多應(yīng)用程序時(shí)是必需的。在 Java 中有多種方法可以讀取純文本文件,例如你可以使用FileReader、BufferedReader或Scanner來(lái)讀取文本文件。每個(gè)實(shí)用程序都提供了一些特殊的東西,例如 BufferedReader 為快速讀取提供數(shù)據(jù)緩沖,而 Scanner 提供解析能力。
1、方法
- 使用
BufferedReader類(lèi) - 使用
Scanner類(lèi) - 使用文件閱讀器類(lèi)
- 讀取列表中的整個(gè)文件
- 將文本文件讀取為字符串
我們還可以同時(shí)使用 BufferReader 和 Scanner 在 Java 中逐行讀取文本文件。然后 Java SE 8 引入了另一個(gè) Stream 類(lèi)java.util.stream.Stream,它提供了一種惰性且更有效的方式來(lái)讀取文件。
讓我們更深入地討論上述每個(gè)方法,最重要的是通過(guò)一個(gè)干凈的 Java 程序?qū)崿F(xiàn)它們。?
方法一、 使用BufferedReader類(lèi)
此方法從字符輸入流中讀取文本。它確實(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 周?chē)?,例?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 類(lèi)
讀取字符文件的便利類(lèi)。此類(lèi)的構(gòu)造函數(shù)假定默認(rèn)字符編碼和默認(rèn)字節(jié)緩沖區(qū)大小是合適的。
該類(lèi)中定義的構(gòu)造函數(shù)如下:
FileReader(File file):給定要讀取的文件,創(chuàng)建一個(gè)新的FileReaderFileReader(FileDescriptor fd):創(chuàng)建一個(gè)新的FileReader,給定要從中讀取的FileDescriptorFileReader(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 類(lèi)
一個(gè)簡(jiǎn)單的文本掃描器,可以使用正則表達(dá)式解析原始類(lèi)型和字符串。Scanner 使用分隔符模式將其輸入分解為標(biāo)記,默認(rèn)情況下與空格匹配。然后可以使用各種 next 方法將結(jié)果令牌轉(zhuǎn)換為不同類(lèi)型的值。
示例 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、語(yǔ)法
public static List readAllLines(Path path,Charset cs)throws IOException
此方法將以下內(nèi)容識(shí)別為行終止符:?
\u000D 后跟 \u000A,回車(chē)后跟換行符 \u000A,換行 \u000D,回車(chē)
例子:
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è)問(wèn)題,查看hystrix源碼可以看到,如果有緩存配置是優(yōu)先使用的緩存的,因此如果配置更新,必須要更新緩存,不能使用Hystrix.reset()方法來(lái)更新緩存,需要的朋友可以參考下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)處理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07
Java中java.lang.ClassCastException異常原因及解決方法
大家好,本篇文章主要講的是Java中java.lang.ClassCastException異常原因及解決方法,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下2022-01-01
使用RedisAtomicLong優(yōu)化性能問(wèn)題
這篇文章主要介紹了使用RedisAtomicLong優(yōu)化性能問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11
基于spring?data?jpa?@query返回map的踩坑記錄
這篇文章主要介紹了基于spring?data?jpa?@query返回map的踩坑記錄,具有很好的參考價(jià)值,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11
解決IDEA開(kāi)發(fā)工具右側(cè)沒(méi)有Maven工具欄的問(wèn)題
這篇文章主要給大家解決了IDEA開(kāi)發(fā)工具右側(cè)沒(méi)有Maven工具欄的問(wèn)題,文中有詳細(xì)的解決步驟,如果有遇到一樣問(wèn)題的小伙伴,可以參考閱讀本文2023-09-09
淺談SpringMVC請(qǐng)求映射handler源碼解讀
這篇文章主要介紹了淺談SpringMVC請(qǐng)求映射handler源碼解讀,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03

