Java讀取文本文件的各種方法
前言:
有多種寫入和讀取文本文件的方法。這在處理許多應(yīng)用程序時是必需的。在 Java 中有多種方法可以讀取純文本文件,例如你可以使用FileReader、BufferedReader或Scanner來讀取文本文件。每個實用程序都提供了一些特殊的東西,例如 BufferedReader 為快速讀取提供數(shù)據(jù)緩沖,而 Scanner 提供解析能力。
1、方法
- 使用
BufferedReader類 - 使用
Scanner類 - 使用文件閱讀器類
- 讀取列表中的整個文件
- 將文本文件讀取為字符串
我們還可以同時使用 BufferReader 和 Scanner 在 Java 中逐行讀取文本文件。然后 Java SE 8 引入了另一個 Stream 類java.util.stream.Stream,它提供了一種惰性且更有效的方式來讀取文件。
讓我們更深入地討論上述每個方法,最重要的是通過一個干凈的 Java 程序?qū)崿F(xiàn)它們。?
方法一、 使用BufferedReader類
此方法從字符輸入流中讀取文本。它確實緩沖以有效讀取字符、數(shù)組和行。可以指定緩沖區(qū)大小,也可以使用默認(rèn)大小。對于大多數(shù)用途,默認(rèn)值足夠大。通常,Reader 發(fā)出的每個讀取請求都會導(dǎo)致對底層字符或字節(jié)流發(fā)出相應(yīng)的讀取請求。因此,建議將 BufferedReader 包裝在任何 read() 操作可能代價高昂的 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)建一個新的FileReaderFileReader(FileDescriptor fd):創(chuàng)建一個新的FileReader,給定要從中讀取的FileDescriptorFileReader(String fileName):創(chuàng)建一個新的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 類
一個簡單的文本掃描器,可以使用正則表達(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í)編程可以參考海擁的博客
方法四、讀取列表中的整個文件
從文件中讀取所有行。此方法可確保在讀取所有字節(jié)或拋出 I/O 錯誤或其他運行時異常時關(guān)閉文件。使用指定的字符集將文件中的字節(jié)解碼為字符。?
2、語法
public static List readAllLines(Path path,Charset cs)throws IOException
此方法將以下內(nèi)容識別為行終止符:?
\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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot源碼分析之bootstrap.properties文件加載的原理
本文通過訪問看到bootstrap.properties中的信息獲取到了,同時age也被application.properties中的屬性覆蓋掉了。加載順序到底是什么?為什么會覆蓋呢?我們接下來分析下吧2021-12-12
SpringBoot擴(kuò)展點EnvironmentPostProcessor實例詳解
這篇文章主要介紹了SpringBoot擴(kuò)展點EnvironmentPostProcessor的相關(guān)知識,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-04-04
Java基礎(chǔ)之MapReduce框架總結(jié)與擴(kuò)展知識點
本章,是MapReduce的最終章,我在寫本章的時候,發(fā)現(xiàn)前面忘記介紹MpaTask與ReduceTask了,所以本章補(bǔ)上哈,另外還有兩個擴(kuò)展的知識點,講完這些,我會對整個MapReduce進(jìn)行總結(jié)一下,讓大家再次了解MapReduce的工作流程,更加清晰地認(rèn)識MapReduce ,需要的朋友可以參考下2021-05-05
Java利用釘釘機(jī)器人實現(xiàn)發(fā)送群消息
這篇文章主要為大家詳細(xì)介紹了Java語言如何通過釘釘機(jī)器人發(fā)送群消息通知,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2022-09-09
Java excel數(shù)據(jù)導(dǎo)入mysql的實現(xiàn)示例詳解
今天教大家如何使用Java將excel數(shù)據(jù)導(dǎo)入MySQL,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)java的小伙伴呢很有幫助,需要的朋友可以參考下2022-08-08

