Java日常開(kāi)發(fā)中讀寫TXT文本舉例詳解
前言
在數(shù)字浪潮洶涌澎湃的時(shí)代,程序開(kāi)發(fā)宛如一座神秘而宏偉的魔法城堡,矗立在科技的浩瀚星空中。代碼的字符,似那閃爍的星辰,按照特定的軌跡與節(jié)奏,組合、交織、碰撞,即將開(kāi)啟一場(chǎng)奇妙且充滿無(wú)限可能的創(chuàng)造之旅。當(dāng)空白的文檔界面如同深邃的宇宙等待探索,程序員們則化身無(wú)畏的星辰開(kāi)拓者,指尖在鍵盤上輕舞,準(zhǔn)備用智慧與邏輯編織出足以改變世界運(yùn)行規(guī)則的程序畫卷,在 0 和 1 的二進(jìn)制世界里,鐫刻下屬于人類創(chuàng)新與突破的不朽印記。
一、讀取 TXT 文本
1.1 使用BufferedReader讀取
- 原理:BufferedReader是 Java 中用于高效讀取字符流的類。它可以從一個(gè)字符輸入流(如FileReader)讀取文本,并提供緩沖功能,減少對(duì)底層資源的頻繁訪問(wèn),提高讀取效率。
步驟示例:
1.首先,需要導(dǎo)入相關(guān)的包java.io.BufferedReader和java.io.FileReader。
import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException;
2.然后,使用try - catch塊來(lái)處理可能出現(xiàn)的IOException。在try塊中,創(chuàng)建FileReader對(duì)象來(lái)關(guān)聯(lián)要讀取的文本文件,再將其傳遞給BufferedReader對(duì)象。
public class ReadTxtFile { public static void main(String[] args) { try { BufferedReader reader = new BufferedReader(new FileReader("example.txt")); String line; while ((line = reader.readLine())!= null) { System.out.println(line); } reader.close(); } catch (IOException e) { e.printStackTrace(); } } }
在上述代碼中,reader.readLine()方法用于逐行讀取文本內(nèi)容,當(dāng)讀取到文件末尾時(shí)返回null。這樣就可以通過(guò)循環(huán)將文件內(nèi)容逐行打印出來(lái)。最后,要記得關(guān)閉BufferedReader,釋放資源。
1.2 使用Scanner讀取
原理:Scanner類提供了一種簡(jiǎn)單的方式來(lái)解析各種基本數(shù)據(jù)類型和字符串。當(dāng)用于讀取文本文件時(shí),它可以根據(jù)指定的分隔符(默認(rèn)是空格)來(lái)解析文本內(nèi)容。
步驟示例:
導(dǎo)入java.util.Scanner和java.io.File包。
import java.util.Scanner; import java.io.File; import java.io.FileNotFoundException;
同樣在try - catch塊中進(jìn)行操作。創(chuàng)建Scanner對(duì)象,將通過(guò)File對(duì)象打開(kāi)的文本文件作為參數(shù)傳遞給它。
public class ReadTxtFileWithScanner { public static void main(String[] args) { try { Scanner scanner = new Scanner(new File("example.txt")); while (scanner.hasNextLine()) { System.out.println(scanner.nextLine()); } scanner.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } } }
這里scanner.hasNextLine()用于判斷是否還有下一行內(nèi)容,scanner.nextLine()用于讀取下一行內(nèi)容并返回。最后關(guān)閉Scanner對(duì)象。
字節(jié)流讀取(FileInputStream)后轉(zhuǎn)換為字符流(適用于讀取非文本編碼可能有問(wèn)題的情況)
原理:FileInputStream用于以字節(jié)流的方式讀取文件內(nèi)容。如果要將字節(jié)流轉(zhuǎn)換為字符流來(lái)處理文本內(nèi)容,可以將其包裝在InputStreamReader中,再使用BufferedReader進(jìn)行緩沖讀取,這樣可以處理一些特殊編碼的文本文件。
步驟示例:
導(dǎo)入java.io.FileInputStream、java.io.InputStreamReader和java.io.BufferedReader包。
import java.io.FileInputStream; import java.io.InputStreamReader; import java.io.BufferedReader; import java.io.IOException;
在try - catch塊中,首先創(chuàng)建FileInputStream對(duì)象,然后將其傳遞給InputStreamReader,再傳遞給BufferedReader進(jìn)行讀取。
public class ReadTxtFileWithByteStream { public static void main(String[] args) { try { FileInputStream fis = new FileInputStream("example.txt"); InputStreamReader isr = new InputStreamReader(fis, "UTF - 8"); BufferedReader reader = new BufferedReader(isr); String line; while ((line = reader.readLine())!= null) { System.out.println(line); } reader.close(); } catch (IOException e) { e.printStackTrace(); } } }
在上述代碼中,InputStreamReader構(gòu)造函數(shù)中的第二個(gè)參數(shù)指定了文件的編碼方式(這里是UTF - 8),可以根據(jù)實(shí)際情況進(jìn)行修改。
二、寫入 TXT 文本
2.1 使用BufferedWriter寫入
原理:BufferedWriter是用于將文本寫入字符輸出流的類,它提供緩沖功能,減少物理寫入操作的次數(shù),提高寫入效率。
步驟示例:導(dǎo)入java.io.BufferedWriter和java.io.FileWriter包。
import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException;
在try - catch塊中,創(chuàng)建FileWriter對(duì)象來(lái)關(guān)聯(lián)要寫入的文本文件,再將其傳遞給BufferedWriter對(duì)象。使用write方法寫入內(nèi)容,最后通過(guò)flush方法將緩沖區(qū)內(nèi)容寫入文件,并關(guān)閉BufferedWriter。
public class WriteTxtFile { public static void main(String[] args) { try { BufferedWriter writer = new BufferedWriter(new FileWriter("output.txt")); writer.write("這是要寫入文本文件的內(nèi)容"); writer.flush(); writer.close(); } catch (IOException e) { e.printStackTrace(); } } }
2.2 使用PrintWriter寫入
原理:PrintWriter提供了方便的打印方法來(lái)寫入各種數(shù)據(jù)類型(如整數(shù)、浮點(diǎn)數(shù)、字符串等)到文本輸出流。它可以自動(dòng)將數(shù)據(jù)轉(zhuǎn)換為字符串并寫入文件。
步驟示例:
導(dǎo)入java.io.PrintWriter和java.io.File包。
import java.io.PrintWriter; import java.io.File; import java.io.FileNotFoundException;
在try - catch塊中,創(chuàng)建PrintWriter對(duì)象,將通過(guò)File對(duì)象打開(kāi)的文本文件作為參數(shù)傳遞給它。使用println或print方法寫入內(nèi)容,最后關(guān)閉PrintWriter。
public class WriteTxtFileWithPrintWriter { public static void main(String[] args) { try { PrintWriter writer = new PrintWriter(new File("output.txt")); writer.println("這是第一行內(nèi)容"); writer.print("這是第二行內(nèi)容"); writer.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } } }
2.3 字節(jié)流寫入(FileOutputStream)后轉(zhuǎn)換為字符流(適用于特殊編碼寫入等情況)
原理:FileOutputStream用于以字節(jié)流的方式將數(shù)據(jù)寫入文件。如果要將字節(jié)流轉(zhuǎn)換為字符流來(lái)寫入文本內(nèi)容,可以將其包裝在OutputStreamReader中,再使用BufferedWriter進(jìn)行緩沖寫入,這種方式在處理特殊編碼文件寫入時(shí)比較有用。
步驟示例:
導(dǎo)入java.io.FileOutputStream、java.io.OutputStreamReader和java.io.BufferedWriter包。
import java.io.FileOutputStream; import java.io.OutputStreamReader; import java.io.BufferedWriter; import java.io.IOException;
在try - catch塊中,首先創(chuàng)建FileOutputStream對(duì)象,然后將其傳遞給OutputStreamReader,再傳遞給BufferedWriter進(jìn)行寫入。
public class WriteTxtFileWithByteStream { public static void main(String[] args) { try { FileOutputStream fos = new FileOutputStream("output.txt"); OutputStreamReader osw = new OutputStreamReader(fos, "UTF - 8"); BufferedWriter writer = new BufferedWriter(osw); writer.write("這是要寫入的內(nèi)容"); writer.flush(); writer.close(); } catch (IOException e) { e.printStackTrace(); } } }
同樣,OutputStreamReader構(gòu)造函數(shù)中的第二個(gè)參數(shù)指定了文件的編碼方式。
三、注意事項(xiàng)
3.1 文件路徑問(wèn)題
讀取和寫入文件時(shí),文件路徑是一個(gè)關(guān)鍵因素。相對(duì)路徑是相對(duì)于當(dāng)前工作目錄而言的。在 Java 中,可以通過(guò)System.getProperty(“user.dir”)獲取當(dāng)前工作目錄。如果文件位于項(xiàng)目的特定目錄下,要確保路徑的正確性。
例如,如果example.txt文件位于項(xiàng)目的resources目錄下,在 Eclipse 等 IDE 中,相對(duì)路徑可能需要根據(jù)項(xiàng)目的結(jié)構(gòu)進(jìn)行調(diào)整,可能是src/main/resources/example.txt等。
3.2 編碼問(wèn)題
文本文件有多種編碼方式,如 UTF - 8、GBK 等。在讀取和寫入時(shí),要確保編碼方式的一致性。如果編碼方式不一致,可能會(huì)導(dǎo)致亂碼問(wèn)題。
例如,在讀取一個(gè)使用 UTF - 8 編碼的文件時(shí),應(yīng)該使用InputStreamReader或BufferedReader并指定 UTF - 8 編碼來(lái)正確讀取內(nèi)容。同樣,在寫入文件時(shí),也要根據(jù)需要選擇合適的編碼方式。
3.3 資源釋放問(wèn)題
無(wú)論是讀取還是寫入文件,都要及時(shí)關(guān)閉打開(kāi)的流(如BufferedReader、BufferedWriter等),以釋放系統(tǒng)資源。如果不關(guān)閉流,可能會(huì)導(dǎo)致資源泄漏,特別是在頻繁讀取或?qū)懭胛募那闆r下。
可以使用try - with - resources語(yǔ)句來(lái)自動(dòng)關(guān)閉資源,從 Java 7 開(kāi)始支持這種方式。例如,在讀取文件時(shí):
try (BufferedReader reader = new BufferedReader(new FileReader("example.txt"))) { String line; while ((line = reader.readLine())!= null) { System.out.println(line); } } catch (IOException e) { e.printStackTrace(); }
在try - with - resources語(yǔ)句中,當(dāng)代碼塊執(zhí)行結(jié)束后,會(huì)自動(dòng)調(diào)用資源的close方法,這樣可以更加方便和安全地管理資源。
結(jié)束語(yǔ)
親愛(ài)的朋友,無(wú)論前路如何漫長(zhǎng)與崎嶇,都請(qǐng)懷揣夢(mèng)想的火種,因?yàn)樵谏畹膹V袤星空中,總有一顆屬于你的璀璨星辰在熠熠生輝,靜候你抵達(dá)。
愿你在這紛繁世間,能時(shí)常收獲微小而確定的幸福,如春日微風(fēng)輕拂面龐,所有的疲憊與煩惱都能被溫柔以待,內(nèi)心永遠(yuǎn)充盈著安寧與慰藉。
到此這篇關(guān)于Java日常開(kāi)發(fā)中讀寫TXT文本詳解的文章就介紹到這了,更多相關(guān)JAVA讀寫TXT文本內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring boot2X Consul如何使用Feign實(shí)現(xiàn)服務(wù)調(diào)用
這篇文章主要介紹了spring boot2X Consul如何使用Feign實(shí)現(xiàn)服務(wù)調(diào)用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12Mybatis Plus查詢時(shí)sql字段名大小寫報(bào)錯(cuò)的解決
這篇文章主要介紹了Mybatis Plus查詢時(shí)sql字段名大小寫報(bào)錯(cuò)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12SpringBoot集成JPA持久層框架,簡(jiǎn)化數(shù)據(jù)庫(kù)操作
JPA(Java Persistence API)意即Java持久化API,是Sun官方在JDK5.0后提出的Java持久化規(guī)范。主要是為了簡(jiǎn)化持久層開(kāi)發(fā)以及整合ORM技術(shù),結(jié)束Hibernate、TopLink、JDO等ORM框架各自為營(yíng)的局面。JPA是在吸收現(xiàn)有ORM框架的基礎(chǔ)上發(fā)展而來(lái),易于使用,伸縮性強(qiáng)。2021-06-06Eclipse設(shè)定文件的默認(rèn)打開(kāi)方式的具體操作步驟
以下是對(duì)Eclipse設(shè)定文件的默認(rèn)打開(kāi)方式的具體操作步驟進(jìn)行了詳細(xì)的介紹,需要的朋友可以過(guò)來(lái)參考下2013-08-08Java程序結(jié)構(gòu)與常量變量難點(diǎn)解析
JAVA的基本結(jié)構(gòu)就是順序結(jié)構(gòu),除非特別指明,否則就按照順序一句一句執(zhí)行順序結(jié)構(gòu)是最簡(jiǎn)單的算法結(jié)構(gòu),語(yǔ)句與語(yǔ)句之間,框與框之間是按從上到下的順序進(jìn)行的,它是由若干個(gè)依次執(zhí)行的處理步驟組成的,它是任何一個(gè)算法都離不開(kāi)的一種基本算法結(jié)構(gòu)2021-10-10mybatis-plus用insertBatchSomeColumn方法批量新增指定字段
mybatisPlus底層的新增方法是一條一條的新增的,下面這篇文章主要給大家介紹了關(guān)于mybatis-plus用insertBatchSomeColumn方法批量新增指定字段的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-05-05SpringBoot解決BigDecimal傳到前端后精度丟失問(wèn)題
這篇文章將通過(guò)示例詳細(xì)為大家介紹SpringBoot如何解決BigDecimal傳到前端后精度丟失問(wèn)題,文中的示例代碼講解詳細(xì),感興趣的可以了解一下2022-06-06SpringBoot整合Spring Security構(gòu)建安全的Web應(yīng)用
pring Security是一個(gè)強(qiáng)大的身份驗(yàn)證和訪問(wèn)控制框架,本文主要介紹了SpringBoot整合Spring Security構(gòu)建安全的Web應(yīng)用,具有一定的參考價(jià)值,感興趣的可以了解一下2024-01-01