Java8讀檔案僅需一行程式碼
JDK7中引入了新的檔案操作類java.nio.file.File,它包含了很多有用的方法來操作檔案,比如檢查檔案是否為隱藏檔案,或者是檢查檔案是否為只讀檔案。開發者還可以使用Files.readAllBytes(Path)方法把整個檔案讀入記憶體,此方法返回一個位元組陣列,還可以把結果傳遞給String的構造器,以便建立字串輸出。
此方法確保了當讀入檔案的所有位元組內容時,檔案屬性是關閉的,否則就會出現IO異常或其它的未檢查異常。這意味著在讀檔案到最後的塊內容後,無需關閉檔案。要注意,此方法不適合讀取很大的檔案,因為可能存在記憶體空間不足的問題。開發者還應該明確規定檔案的字元編碼,以避免任異常或解析錯誤。
如果你想讀入檔案作為字串,那麼你還可以使用readAllLines(Path path, Charset cs)方法,此方法與之前的方法相似,也是在讀完檔案後無需關閉檔案。但是它返回的不是位元組陣列,而是字串陣列。而且,Java8重寫了此方法,無需指定字符集,直接使用UTF-8編碼進行字串轉換。
如果你想一行一行的讀入檔案作為字串,那麼你可以使用Files.lines()方法,它會從讀入的檔案中返回字串流,並使用UTF-8編碼把位元組轉換成字元。使用forEach()方法,可以只用一行Java程式碼實現把檔案的所有內容輸出到控制檯,如下面第三個程式碼片段。
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 FileReadingTest { public static void main(String[] args) throws IOException { // Java 7 例子 // Files.readAllBytes預設以UTF-8編碼讀入檔案,故檔案的編碼如果不是UTF-8,那麼中文內容會出現亂字元 System.out.println(new String(Files.readAllBytes(Paths.get("D:\\jd.txt")))); // Java 8例子 List<string> lines = Files.readAllLines(Paths.get("D:\\jd.txt"), StandardCharsets.UTF_8); StringBuilder sb = new StringBuilder(); for(String line : lines){ sb.append(line); } String fromFile = sb.toString(); System.out.println(fromFile); } }</string>
如果使用的不是JDK7,而是JDK8,那麼一行程式碼即可完成讀檔案。
import static java.lang.System.out; import static java.nio.file.Files.readAllBytes; import static java.nio.file.Paths.get; import java.io.IOException; public class FileIntoString { public static void main(String[] args) throws IOException { // 一行程式碼搞定讀檔案,預設是UTF-8編碼 out.println(new String(readAllBytes(get("d:/jd.txt")))); } }
如果使用JDK8,那麼還可以使用流API來讀寫檔案,這樣程式碼更簡潔、高效。下面的例子中,lines()方法返回字串流,字串使用的是UTF-8編碼。如下:
import java.io.IOException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Paths; public class Java8FileReader { public static void main(String[] args) throws IOException { // Java8用流的方式讀檔案,更加高效 Files.lines(Paths.get("D:\\jd.txt"), StandardCharsets.UTF_8).forEach(System.out::println); } }
上面的例子要注意幾點:
1)檔案可能很大,可能會超出記憶體空間,使用前要做評估。
2)要輸出日誌,記錄為什麼無法讀取檔案或者在閱讀檔案時遇到的任何錯誤。
3)在把位元組轉換成字元時,應該指定字元編碼。
4)要處理檔案不存在的情況。
還要注意,如果讀入的檔案的編碼是ANSI編碼,那麼上面的例子在讀取檔案內容時會報java.nio.charset.MalformedInputException: Input length = 1錯誤。
相關文章
- SHELL程式設計—每次讀取檔案的一行程式設計
- 把文字檔案一行一行讀出來
- 讀取檔案最後一行
- GitHub 標星 148K+!這些神器僅需一行程式碼即可下載全網視訊!Github行程
- 僅一行程式碼,打造一個線上編輯器行程
- Java 按行讀檔案操作程式碼Java
- 教大家python讀取一行一行檔案內容的方法Python
- 用Groovy讀取本地檔案的程式碼
- javascript讀取xml檔案程式碼例項JavaScriptXML
- mysql程式碼閱讀-frm檔案格式解析MySql
- go學習之檔案讀取問題(需更新)Go
- [work] python讀取txt檔案最後一行Python
- 《第一行程式碼》讀書筆記三行程筆記
- 讀取每一行檔案資料的方法bufferedreader
- Spring用程式碼來讀取properties檔案Spring
- 從ARM機上讀取JPG檔案程式碼
- JavaScript讀取文字檔案內容程式碼例項JavaScript
- Node.js一行程式碼實現靜態檔案伺服器Node.js行程伺服器
- Bash指令碼:怎樣一行行地讀檔案(最好和最壞的方法)指令碼
- 僅用一行程式碼就能視覺化人工神經網路(ANNs)!行程視覺化神經網路
- ajax讀取檔案中內容的程式碼例項
- Python中檔案讀取與儲存程式碼示例Python
- Git回滾程式碼到某個commit(圖文講解 僅需2步)GitMIT
- 程式設計師不僅僅是寫程式碼程式設計師
- PE檔案中嵌入檔案讀寫程式碼實現被解密檔案的再加密! (7千字)解密加密
- 無需編寫一行程式碼,實現任何方法的流量防護能力行程
- 教育網站原始碼開發流程僅需這幾步!網站原始碼
- Rust 程式設計,讀取檔案Rust程式設計
- Springboot 一行程式碼實現檔案上傳 20個平臺!少寫程式碼到極致Spring Boot行程
- python程式碼讀取遠端檔案的方法--paramikoPython
- Mendmix程式碼解析:百搭的配置檔案讀取工具ResourceUtils
- 我的讀取hadoop Sequence格式的檔案的程式碼Hadoop
- 一行 Python 程式碼Python
- 無需一行程式碼就能搞定機器學習的開源神器——手把手教你配置使用行程機器學習
- SQL隱碼攻擊讀寫檔案SQL
- 和我一起讀Java8 ArrayList原始碼Java原始碼
- js讀寫二進位制檔案簡單程式碼例項JS
- javascript讀寫二進位制檔案簡單程式碼例項JavaScript