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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

字符流---IO学习笔记(三)

發(fā)布時(shí)間:2023/12/20 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 字符流---IO学习笔记(三) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

字符流:

文本和文本文件的區(qū)別:
文本:
java的文本(char)是16位無(wú)符號(hào)整數(shù),是字符的unicode編碼(雙字節(jié)編碼)。
文件:
文件是byte byte byte…的數(shù)據(jù)序列。
文本文件:
文本文件是文本(char)序列按照某種編碼方案(utf-8,utf-16be,gbk)序列化為byte的存儲(chǔ)結(jié)果。

字符流(Reader,Writer)
操作的是文本文件。對(duì)于mp3,二進(jìn)制文件是字節(jié)文件不適合用字符流讀取,因?yàn)樽x取出來(lái)的是char,沒有意義。
字符的處理,一次處理一個(gè)字符
字符的底層仍然是基本的字節(jié)序列

字符流(字節(jié)字符轉(zhuǎn)換流)的基本實(shí)現(xiàn):
InputStreamReader:
完成byte流解析為char流,按照編碼解析
OutputStreamWriter:
提供char流到byte流,按照編碼處理

字符流的基本方法的使用:

package com.test.FileInputStreamReader;import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader;public class FileInputStreamReaderTest {public static void main(String[] args){try {String filename = "C:\\Users\\Administrator\\Desktop\\javaIO\\讀取的測(cè)試文件.txt";ReadFile1(filename);ReadFile2(filename);} catch (Exception e) {e.printStackTrace();}}/*** 單字符讀取* 返回的是讀到字節(jié)轉(zhuǎn)換成int類型(最后8位)的值* @param fis*/public static void ReadFile1(String filename) throws IOException{System.out.println("單字節(jié)讀取的方式:");InputStreamReader isr = new InputStreamReader(new FileInputStream(filename));//默認(rèn)的是項(xiàng)目的編碼(這里是gbk) // InputStreamReader isr = new InputStreamReader(fis, "gbk");int i;while((i = isr.read())!=-1){System.out.print((char)i);}isr.close();}/*** 批量讀取* 放入buf這個(gè)字符數(shù)組中,從第0個(gè)位置開始放置,最多放buf.length個(gè)* 返回的是讀到字符的個(gè)數(shù)* @param fis* @throws IOException*/public static void ReadFile2(String filename) throws IOException{System.out.println();System.out.println("批量讀取的方式:");InputStreamReader isr = new InputStreamReader(new FileInputStream(filename));//默認(rèn)的是項(xiàng)目的編碼(這里是gbk)char[] buf = new char[2*1024];int i;while((i = isr.read(buf, 0, buf.length))!=-1){ // //第一種轉(zhuǎn)換成字符的方式 // for(int j = 0;j<i;j++){ // System.out.print((char)buf[j]); // }//第二種轉(zhuǎn)換成字符串的方式String str = new String(buf,0,i);System.out.println(str);}isr.close();}}

結(jié)果截圖:

注意:在操作字符流的時(shí)候要注意編碼的問題。這里讀取的文件是gbk編碼格式的,所以在讀取的時(shí)候要采用gbk編碼的讀取方式。否則就會(huì)出現(xiàn)亂碼。

FileWriter和FileReader:
其實(shí)上邊的代碼中的:
InputStreamReader isr = new InputStreamReader(new FileInputStream(String filename));
這部分代碼完全可以使用
FileReader fr = new FileReader(String filename);
來(lái)替代。
FileReader和FileWriter的基本方法的使用:

package com.test.FileReaderAndFileWriter;import java.io.FileReader; import java.io.FileWriter; import java.io.IOException;public class FileReaderAndFileWriterTest{public static void main(String[] args) throws IOException{FileReader fr = new FileReader("C:\\Users\\Administrator\\Desktop\\javaIO\\讀取的測(cè)試文件.txt");//缺點(diǎn):不過這里只能識(shí)別項(xiàng)目默認(rèn)的編碼不能設(shè)置其他的編碼,如果讀取的文件編碼不是項(xiàng)目默認(rèn)的編碼,讀取時(shí)就會(huì)出現(xiàn)亂碼FileWriter fw = new FileWriter("C:\\Users\\Administrator\\Desktop\\javaIO\\寫出的測(cè)試文件.txt");char[] buf = new char[2*1024];int i;while((i = fr.read(buf, 0, buf.length))!=-1){fw.write(buf, 0, i);fw.flush();}fr.close();fw.close();}}

注意:FileReader和FileWriter與之前的代碼中通過InputStreamReader包裝FileInputStream相比,雖然簡(jiǎn)潔,但是不能設(shè)置采用什么編碼讀取文件,只能使用項(xiàng)目默認(rèn)的編碼讀取文件。

字符流的過濾器:
BufferedReader——>readLine 一次讀一行
BufferedWriter/PrintWriter———>寫一行

package com.test.BufferedReaderAndBufferedWriter;import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter;public class BufferedReaderTest {public static void main(String[] args){String filename = "C:\\Users\\Administrator\\Desktop\\javaIO\\讀取的測(cè)試文件.txt";try {BufferedWriter(filename);PrintWriter(filename);} catch (IOException e) {e.printStackTrace();}}/*** 使用BufferedWriter寫出* @throws IOException*/public static void BufferedWriter(String filename) throws IOException{BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(filename)));BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("C:\\Users\\Administrator\\Desktop\\javaIO\\測(cè)試文件1.txt")));String line;while((line = br.readLine())!=null){//但是這里的readLine并不識(shí)別換行符System.out.println(line); // bw.write(line);//寫出的文件內(nèi)容沒有進(jìn)行換行 // bw.write(line+"\r\n");//這里再寫出文件的時(shí)候要單獨(dú)寫出換行操作bw.write(line);bw.newLine();//換行操作bw.flush();}br.close();bw.close();}/*** 使用PrintWriter寫出* @param filename* @throws IOException*/public static void PrintWriter(String filename) throws IOException{BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(filename)));PrintWriter pw = new java.io.PrintWriter("C:\\Users\\Administrator\\Desktop\\javaIO\\測(cè)試文件2.txt");String line;while((line = br.readLine())!=null){pw.println(line);pw.flush();}br.close();pw.close();} }

上邊這兩種寫出文件的方法的效果是一樣的。

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的字符流---IO学习笔记(三)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。