日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java-Java I/O 字节流之BufferedReader/BufferedWriter

發布時間:2025/3/21 java 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java-Java I/O 字节流之BufferedReader/BufferedWriter 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  • 概述
  • Reader InputStreamReader FileReader and BufferedReader
  • Writer OutputStreamWriter FileWriter and BufferedWriter
  • Character Encoding and Charset
  • 示例
    • BufferedReader
    • BufferedWriter

概述

本篇博文主要介紹 如何使用java.io包中提供的類讀取和寫入文本(或字符)文件


Reader, InputStreamReader, FileReader and BufferedReader

Reader是讀取字符流的抽象類。 它實現以下基本方法:

  • read(): reads a single character.
  • read(char[]): reads an array of characters.
  • skip(long): skips some characters.
  • close(): closes the stream.

InputStreamReader是從字節流到字符流的橋梁。 它使用指定的字符集將字節轉換為字符。 字符集可以是操作系統的默認字符編碼,也可以在創建InputStreamReader時顯式指定。

FileReader是使用操作系統的默認字符編碼讀取文本文件的便捷類。

BufferedReader從字符流中讀取文本(字符被緩沖以避免從基礎流中經常讀取),并提供了一種方便的閱讀文本行readLine()的方法。

我們來看下Reader的繼承關系


Writer, OutputStreamWriter, FileWriter and BufferedWriter

Writer是寫入字符流的抽象類。 它實現以下基本方法:

  • write(int): writes a single character.
  • write(char[]): writes an array of characters.
  • write(String): writes a string.
  • close(): closes the stream.

OutputStreamWriter是從字節流到字符流的橋梁。 使用指定的字符集將字符編碼為字節。 字符集可以是操作系統的默認字符編碼,也可以在創建OutputStreamWriter時顯式指定。

FileWriter是使用操作系統的默認字符編碼編寫文本文件的便捷類。

BufferedWriter有效地將文本寫入字符流(字符,數組和字符串被緩沖以避免頻繁寫入底層流),并為寫入行分隔符newLine()提供了一種方便的方法。


Character Encoding and Charset

當構建reader 或者 writer 對象時,使用操作系統的默認字符編碼

FileReader fileReader = new FileReader("myFile.txt");FileWriter fileWriter = new FileWriter("YourFile.txt");

所以,如果我們要使用特定的字符集,請改用InputStreamReader或OutputStreamWriter

InputStreamReader reader = new InputStreamReader(new FileInputStream("MyFile.txt"), "UTF-16");

這將創建一個具有Unicode字符編碼UTF-16的InputStreamReader

構造具有UTF-8編碼OutputStreamWriter

OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("MyFile.txt"), "UTF-8");

如果我們想使用BufferedReader,只需將InputStreamReader包裝在其中,例如:

BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream("MyFile.txt"), "UTF-8"));

同樣的 BufferedWriter 如下

OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("MyFile.txt"), "UTF-16");BufferedWriter bufferedWriter = new BufferedWriter(osw);

示例

BufferedReader

示例一: 從文件MyFile.txt讀取單個字符,并將所有字符打印到輸出控制臺:

@Testpublic void test() {FileReader fileReader = null;try {fileReader = new FileReader(new File("D:/xgj.txt"));int character;while ((character = fileReader.read()) != -1) {System.out.println((char) character);}// close streamfileReader.close();} catch (IOException e) {e.printStackTrace();}}

示例二 讀取文本文件,假設編碼為UTF-8:

@Testpublic void test() {InputStreamReader in;try {in = new InputStreamReader(new FileInputStream(new File("D:/xgj.txt")), "UTF-8");int character;while ((character = in.read()) != -1) {System.out.println((char) character);}// close streamin.close();} catch (UnsupportedEncodingException e) {e.printStackTrace();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}

示例三 使用BufferedReader逐行讀取文本文件(這是最有效和首選的方式):

@Testpublic void test() {BufferedReader bufferedReader;try {bufferedReader = new BufferedReader(new FileReader(new File("D:/xgj.txt")));String line;while ((line = bufferedReader.readLine()) != null) {System.out.println(line);}// close streambufferedReader.close();} catch (IOException e) {e.printStackTrace();}}

BufferedWriter

使用FileWriter將兩個單詞“Hello World”和“Good Bye!”寫入名為MyFile.txt的文件:

@Testpublic void test() {FileWriter fileWriter;try {// If the second argument is true, then bytes will be written to the// end of the file rather than the beginning.fileWriter = new FileWriter(new File("D:/MyFile.txt"), true);fileWriter.write("Hello World");fileWriter.write("\r\n"); // write new linefileWriter.write("Good Bye!");// close streamfileWriter.close();} catch (IOException e) {e.printStackTrace();}}

請注意,FileWriter默認使用操作系統的默認字符編碼。 如果文件不存在將創建一個新的文件,存在則覆蓋現有的。
如果要將文本附加到現有文件,請將FileWriter類的構造函數第二個入參true.

如下:

FileWriter writer = new FileWriter("MyFile.txt", true);

示例二 使用一個包含FileWriter的BufferedWriter 來將文本附加到現有文件中:

這是寫入文本文件的首選方法,因為BufferedWriter 提供了寫入字符流的有效方式。

@Testpublic void test() {BufferedWriter bufferedWriter;try {bufferedWriter = new BufferedWriter(new FileWriter("D:/Myfile.txt", true));bufferedWriter.write("Hello World");bufferedWriter.newLine(); // 分隔符bufferedWriter.write("See You Again!");// close streambufferedWriter.close();} catch (IOException e) {e.printStackTrace();}}

以下示例在寫入文件時指定特定字符編碼(UTF-8):

@Testpublic void test() {try {FileOutputStream outputStream = new FileOutputStream("D:/MyFile.txt");OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream, "UTF-8");BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter);bufferedWriter.write("Hello");bufferedWriter.newLine();bufferedWriter.write("I/O");// close streambufferedWriter.close();} catch (IOException e) {e.printStackTrace();}}

注意:
從Java 7開始,我們可以使用try-with-resources語句簡化打開和關閉讀寫器的代碼。 例如:

try (FileReader reader = new FileReader("MyFile.txt")) {int character;while ((character = reader.read()) != -1) {System.out.print((char) character);} } catch (IOException e) {e.printStackTrace(); } 《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的Java-Java I/O 字节流之BufferedReader/BufferedWriter的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。