1.字節(jié)流和字符流

字節(jié)流

字節(jié)流主要是操作byte類型數(shù)據(jù)饭耳,以byte數(shù)組為準(zhǔn),主要操作類就是OutputStream、InputStream

字節(jié)輸出流:OutputStream

OutputStream是整個(gè)IO包中字節(jié)輸出流的最大父類,此類的定義如下:

public?abstract?class?OutputStream?extends?Object?implements?Closeable,Flushable

從以上的定義可以發(fā)現(xiàn)蹦锋,此類是一個(gè)抽象類,如果想要使用此類的話欧芽,則首先必須通過子類實(shí)例化對(duì)象,那么如果現(xiàn)在要操作的是一個(gè)文件葛圃,則可以使用:FileOutputStream類千扔。通過向上轉(zhuǎn)型之后,可以為OutputStream實(shí)例化

Closeable表示可以關(guān)閉的操作库正,因?yàn)槌绦蜻\(yùn)行到最后肯定要關(guān)閉

Flushable:表示刷新曲楚,清空內(nèi)存中的數(shù)據(jù)

FileOutputStream類的構(gòu)造方法如下:

public?FileOutputStream(File?file)throws?FileNotFoundException

寫數(shù)據(jù):

1importjava.io.File;

2importjava.io.FileOutputStream;

3importjava.io.IOException;

4importjava.io.OutputStream;

5

6publicclassTest11?{

7publicstaticvoidmain(String[]?args)throwsIOException?{

8File?f?=newFile("d:"?+?File.separator+"test.txt");

9OutputStream?out=newFileOutputStream(f);//如果文件不存在會(huì)自動(dòng)創(chuàng)建

10String?str="Hello?World";

11byte[]?b=str.getBytes();

12out.write(b);//因?yàn)槭亲止?jié)流,所以要轉(zhuǎn)化成字節(jié)數(shù)組進(jìn)行輸出

13out.close();

14}

15}

也可以一個(gè)字節(jié)一個(gè)字節(jié)進(jìn)行輸出褥符,如下:

1importjava.io.File;

2importjava.io.FileOutputStream;

3importjava.io.IOException;

4importjava.io.OutputStream;

5

6publicclassTest11?{

7publicstaticvoidmain(String[]?args)throwsIOException?{

8File?f?=newFile("d:"?+?File.separator+"test.txt");

9OutputStream?out=newFileOutputStream(f);//如果文件不存在會(huì)自動(dòng)創(chuàng)建

10String?str="Hello?World";

11byte[]?b=str.getBytes();

12for(inti=0;i

13out.write(b[i]);

14}

15out.close();

16}

17}

以上輸出只會(huì)進(jìn)行覆蓋龙誊,如果要追加的話,請(qǐng)看FileOutputStream類的另一個(gè)構(gòu)造方法:

public?FileOutputStream(File?file,boolean?append)throws?FileNotFoundException

在構(gòu)造方法中喷楣,如果將append的值設(shè)置為true趟大,則表示在文件的末尾追加內(nèi)容。

1importjava.io.File;

2importjava.io.FileOutputStream;

3importjava.io.IOException;

4importjava.io.OutputStream;

5

6publicclassTest11?{

7publicstaticvoidmain(String[]?args)throwsIOException?{

8File?f?=newFile("d:"?+?File.separator+"test.txt");

9OutputStream?out=newFileOutputStream(f,true);//追加內(nèi)容

10String?str="\r\nHello?World";

11byte[]?b=str.getBytes();

12for(inti=0;i

13out.write(b[i]);

14}

15out.close();

16}

17}

文件中換行為:\r\n

字節(jié)輸入流:InputStream

既然程序可以向文件中寫入內(nèi)容铣焊,則就可以通過InputStream從文件中把內(nèi)容讀取進(jìn)來逊朽,首先來看InputStream類的定義:

public?abstract?class?InputStream?extends?Object?implements?Closeable

與OutputStream類一樣,InputStream本身也是一個(gè)抽象類曲伊,必須依靠其子類叽讳,如果現(xiàn)在是從文件中讀取,就用FileInputStream來實(shí)現(xiàn)坟募。

觀察FileInputStream類的構(gòu)造方法:

public?FileInputStream(File?file)throws?FileNotFoundException

讀文件:

1importjava.io.File;

2importjava.io.FileInputStream;

3importjava.io.IOException;

4importjava.io.InputStream;

5

6publicclassTest12?{

7publicstaticvoidmain(String[]?args)throwsIOException?{

8File?f?=newFile("d:"?+?File.separator+"test.txt");

9InputStream?in=newFileInputStream(f);

10byte[]?b=newbyte[1024];

11intlen=in.read(b);

12in.close();

13System.out.println(newString(b,0,len));

14}

15}

但以上方法是有問題的岛蚤,用不用開辟這么大的一個(gè)字節(jié)數(shù)組,明顯是浪費(fèi)嘛懈糯,我們可以根據(jù)文件的大小來定義字節(jié)數(shù)組的大小涤妒,F(xiàn)ile類中的方法:public?long?length()

1importjava.io.File;

2importjava.io.FileInputStream;

3importjava.io.IOException;

4importjava.io.InputStream;

5

6publicclassTest13?{

7publicstaticvoidmain(String[]?args)throwsIOException?{

8File?f?=newFile("d:"?+?File.separator+"test.txt");

9InputStream?in=newFileInputStream(f);

10byte[]?b=newbyte[(int)?f.length()];

11in.read(b);

12in.close();

13System.out.println(newString(b));

14}

15}

我們換種方式,一個(gè)字節(jié)一個(gè)字節(jié)讀入~

1importjava.io.File;

2importjava.io.FileInputStream;

3importjava.io.IOException;

4importjava.io.InputStream;

5

6publicclassTest14?{

7publicstaticvoidmain(String[]?args)throwsIOException?{

8File?f?=newFile("d:"?+?File.separator+"test.txt");

9InputStream?in=newFileInputStream(f);

10byte[]?b=newbyte[(int)?f.length()];

11for(inti=0;i

12b[i]=(byte)?in.read();

13}

14in.close();

15System.out.println(newString(b));

16}

17}

但以上情況只適合知道輸入文件的大小昂利,不知道的話用如下方法:

1importjava.io.File;

2importjava.io.FileInputStream;

3importjava.io.IOException;

4importjava.io.InputStream;

5

6publicclassTest15?{

7publicstaticvoidmain(String[]?args)throwsIOException?{

8File?f?=newFile("d:"?+?File.separator+"test.txt");

9InputStream?in=newFileInputStream(f);

10byte[]?b=newbyte[1024];

11inttemp=0;

12intlen=0;

13while((temp=in.read())!=-1){//-1為文件讀完的標(biāo)志

14b[len]=(byte)?temp;

15len++;

16}

17in.close();

18System.out.println(newString(b,0,len));

19}

20}

字符流

在程序中一個(gè)字符等于兩個(gè)字節(jié)届腐,那么java提供了Reader、Writer兩個(gè)專門操作字符流的類蜂奸。

字符輸出流:Writer

Writer本身是一個(gè)字符流的輸出類犁苏,此類的定義如下:

public?abstract?class?Writer?extends?Object?implements?Appendable,Closeable扩所,F(xiàn)lushable

此類本身也是一個(gè)抽象類围详,如果要使用此類,則肯定要使用其子類,此時(shí)如果是向文件中寫入內(nèi)容助赞,所以應(yīng)該使用FileWriter的子類买羞。

FileWriter類的構(gòu)造方法定義如下:

public?FileWriter(File?file)throws?IOException

字符流的操作比字節(jié)流操作好在一點(diǎn),就是可以直接輸出字符串了雹食,不用再像之前那樣進(jìn)行轉(zhuǎn)換操作了畜普。

寫文件:

1importjava.io.File;

2importjava.io.FileWriter;

3importjava.io.IOException;

4importjava.io.Writer;

5

6publicclassTest16?{

7publicstaticvoidmain(String[]?args)throwsIOException?{

8File?f?=newFile("d:"?+?File.separator+"test.txt");

9Writer?out=newFileWriter(f);

10String?str="Hello?World";

11out.write(str);

12out.close();

13}

14}

在默認(rèn)情況下再次輸出會(huì)覆蓋,追加的方法也是在構(gòu)造函數(shù)上加上追加標(biāo)記

1importjava.io.File;

2importjava.io.FileWriter;

3importjava.io.IOException;

4importjava.io.Writer;

5

6publicclassTest17?{

7publicstaticvoidmain(String[]?args)throwsIOException?{

8File?f?=newFile("d:"?+?File.separator+"test.txt");

9Writer?out=newFileWriter(f,true);//追加

10String?str="\r\nHello?World";

11out.write(str);

12out.close();

13}

14}

字符輸入流:Reader

Reader是使用字符的方式從文件中取出數(shù)據(jù)群叶,Reader類的定義如下:

public?abstract?class?Reader?extends?Objects?implements?Readable吃挑,Closeable

Reader本身也是抽象類,如果現(xiàn)在要從文件中讀取內(nèi)容街立,則可以直接使用FileReader子類舶衬。

FileReader的構(gòu)造方法定義如下:

public?FileReader(File?file)throws?FileNotFoundException

以字符數(shù)組的形式讀取出數(shù)據(jù):

1importjava.io.File;

2importjava.io.FileReader;

3importjava.io.IOException;

4importjava.io.Reader;

5

6publicclassTest18?{

7publicstaticvoidmain(String[]?args)throwsIOException?{

8File?f?=newFile("d:"?+?File.separator+"test.txt");

9Reader?input=newFileReader(f);

10char[]?c=newchar[1024];

11intlen=input.read(c);

12input.close();

13System.out.println(newString(c,0,len));

14}

15}

也可以用循環(huán)方式,判斷是否讀到底:

1importjava.io.File;

2importjava.io.FileReader;

3importjava.io.IOException;

4importjava.io.Reader;

5

6publicclassTest19?{

7publicstaticvoidmain(String[]?args)throwsIOException?{

8File?f?=newFile("d:"?+?File.separator+"test.txt");

9Reader?input=newFileReader(f);

10char[]?c=newchar[1024];

11inttemp=0;

12intlen=0;

13while((temp=input.read())!=-1){

14c[len]=(char)?temp;

15len++;

16}

17input.close();

18System.out.println(newString(c,0,len));

19}

20}

字節(jié)流與字符流的區(qū)別

字節(jié)流和字符流使用是非常相似的赎离,那么除了操作代碼的不同之外逛犹,還有哪些不同呢?

字節(jié)流在操作的時(shí)候本身是不會(huì)用到緩沖區(qū)(內(nèi)存)的梁剔,是與文件本身直接操作的虽画,而字符流在操作的時(shí)候是使用到緩沖區(qū)的

字節(jié)流在操作文件時(shí),即使不關(guān)閉資源(close方法)荣病,文件也能輸出狸捕,但是如果字符流不使用close方法的話,則不會(huì)輸出任何內(nèi)容众雷,說明字符流用的是緩沖區(qū)灸拍,并且可以使用flush方法強(qiáng)制進(jìn)行刷新緩沖區(qū),這時(shí)才能在不close的情況下輸出內(nèi)容

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末砾省,一起剝皮案震驚了整個(gè)濱河市鸡岗,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌编兄,老刑警劉巖轩性,帶你破解...
    沈念sama閱讀 211,265評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異狠鸳,居然都是意外死亡揣苏,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門件舵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來卸察,“玉大人,你說我怎么就攤上這事铅祸】又剩” “怎么了合武?”我有些...
    開封第一講書人閱讀 156,852評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)涡扼。 經(jīng)常有香客問我稼跳,道長(zhǎng),這世上最難降的妖魔是什么吃沪? 我笑而不...
    開封第一講書人閱讀 56,408評(píng)論 1 283
  • 正文 為了忘掉前任汤善,我火速辦了婚禮,結(jié)果婚禮上票彪,老公的妹妹穿的比我還像新娘萎津。我一直安慰自己,他們只是感情好抹镊,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著荤傲,像睡著了一般垮耳。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上遂黍,一...
    開封第一講書人閱讀 49,772評(píng)論 1 290
  • 那天终佛,我揣著相機(jī)與錄音,去河邊找鬼雾家。 笑死铃彰,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的芯咧。 我是一名探鬼主播牙捉,決...
    沈念sama閱讀 38,921評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼敬飒!你這毒婦竟也來了邪铲?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,688評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤无拗,失蹤者是張志新(化名)和其女友劉穎带到,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體英染,經(jīng)...
    沈念sama閱讀 44,130評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡揽惹,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了四康。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片搪搏。...
    茶點(diǎn)故事閱讀 38,617評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖闪金,靈堂內(nèi)的尸體忽然破棺而出慕嚷,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 34,276評(píng)論 4 329
  • 正文 年R本政府宣布喝检,位于F島的核電站嗅辣,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏挠说。R本人自食惡果不足惜澡谭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望损俭。 院中可真熱鬧蛙奖,春花似錦、人聲如沸杆兵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽琐脏。三九已至攒砖,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間日裙,已是汗流浹背吹艇。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評(píng)論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留昂拂,地道東北人受神。 一個(gè)月前我還...
    沈念sama閱讀 46,315評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像格侯,于是被迫代替她去往敵國和親鼻听。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 一联四、流的概念和作用精算。 流是一種有順序的,有起點(diǎn)和終點(diǎn)的字節(jié)集合碎连,是對(duì)數(shù)據(jù)傳輸?shù)目偝苫虺橄蠡矣稹<磾?shù)據(jù)在兩設(shè)備之間的傳輸...
    布魯斯不吐絲閱讀 10,023評(píng)論 2 95
  • 1 IONo18 1.1IO框架 【 IO:Input Output 在程序運(yùn)行的過程中,可能需要對(duì)一些設(shè)備進(jìn)...
    征程_Journey閱讀 952評(píng)論 0 1
  • IO簡(jiǎn)單概述 IO解決問題 : 解決設(shè)備與設(shè)備之間的數(shù)據(jù)傳輸問題(硬盤 -> 內(nèi)存 內(nèi)存 -> 硬盤) 讀和寫文...
    奮斗的老王閱讀 3,429評(píng)論 0 53
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法鱼辙,類相關(guān)的語法廉嚼,內(nèi)部類的語法,繼承相關(guān)的語法倒戏,異常的語法怠噪,線程的語...
    子非魚_t_閱讀 31,598評(píng)論 18 399
  • 一個(gè)月又這樣悄然過去了。 時(shí)間過得好快哦杜跷,忙綠中帶有點(diǎn)疲憊哦傍念,為了保證自己的業(yè)績(jī)可以穩(wěn)定并穩(wěn)步上前矫夷,有時(shí)候也無計(jì)可施哦。
    美美_bdc7閱讀 132評(píng)論 0 0