2019-10-12 java I/O流

image

1.InputStream

InputStream是一個(gè)抽象類(lèi)吼拥,是所有字節(jié)輸入流類(lèi)的基類(lèi)臂聋,完成字節(jié)從流中讀出事镣。所有的子類(lèi)必須實(shí)現(xiàn)一個(gè)一個(gè)方法,即read()方法古劲,也以為著所有的字節(jié)輸入類(lèi)都可以實(shí)現(xiàn)單字節(jié)的輸入斥赋。



public abstract int read( ) throws IOException

從當(dāng)前輸入流中讀取數(shù)據(jù)的下一個(gè)字節(jié)。返回的字節(jié)值是在 0 到 255 范圍內(nèi)的一個(gè) int數(shù)产艾。如果已讀到流的末尾 , 沒(méi)有再可讀的字節(jié)時(shí) , 則返回 -1疤剑。該方法將一直阻塞 , 直到有輸入數(shù)據(jù)滑绒、檢測(cè)到了數(shù)據(jù)流尾或拋出異常。如果遇到輸入流的結(jié)尾, 則返回 -1隘膘。如果發(fā)生某個(gè)I/O 錯(cuò)誤 , 則拋出 IOException 異常疑故。


public int read(byte[ ] b) throws IOException

從輸入流中讀取若干個(gè)字節(jié) , 把它們保存到參數(shù) b 指定的字節(jié)數(shù)組中。返回的整數(shù)表示讀取的字節(jié)數(shù)弯菊。如果遇到輸入流的結(jié)尾, 則返回 -1纵势。如果發(fā)生某個(gè) I/O 錯(cuò)誤 , 則拋出IOException 異常。


public int read(byte[ ] b,int off,int len) throws IOException

從輸入流中讀取若干個(gè)字節(jié) , 把它們保存到參數(shù) b 指定的字節(jié)數(shù)組中管钳。參數(shù) off 指定在字節(jié)數(shù)組中開(kāi)始保存數(shù)據(jù)的起始下標(biāo), 參數(shù) len 指定讀取的字節(jié)數(shù)目钦铁。返回的整數(shù)表示實(shí)際讀取的字節(jié)數(shù)。如果遇到輸入的結(jié)尾, 則返回 -1才漆。如果發(fā)生某個(gè) I/O 錯(cuò)誤 , 則拋出IOException 異常牛曹。


public void close( ) throws IOException

關(guān)閉當(dāng)前輸入流 , 并釋放與它相關(guān)的系統(tǒng)資源。 InputStream 的 close() 方法不做任何事醇滥。如果發(fā)生某個(gè)I/O 錯(cuò)誤 , 則拋出 IOException 異常躏仇。


public int available( ) throws IOException

返回可以從輸入流中讀取的字節(jié)數(shù)目。如果發(fā)生某個(gè) I/O 錯(cuò)誤 , 則拋出 IOException異常腺办。

2.OutputStream

一個(gè)抽象類(lèi) , 是所有字節(jié)輸出流類(lèi)的基類(lèi) , 完成將字節(jié)寫(xiě)入到流中焰手。它的派生類(lèi)必須實(shí)現(xiàn)輸出的下一個(gè)字節(jié)的辦法, 即 write() 方法 , 也就意味著所有的字節(jié)輸出流類(lèi)都能完成單字節(jié)的輸入。

重要方法:


public abstract void write(int b) throws IOException

將指定字節(jié)寫(xiě)入當(dāng)前輸入流怀喉。 OutputStream 的子類(lèi)必須提供此方法的一個(gè)實(shí)現(xiàn)书妻。如果發(fā)生某個(gè)I/O 錯(cuò)誤 , 則拋出 IOException 異常。


public void write(byte[ ] b) throws IOException

把參數(shù) b 指定的字節(jié)數(shù)組中的所有字節(jié)寫(xiě)到輸出流躬拢。如果發(fā)生某個(gè) I/O 錯(cuò)誤 , 則拋出IOException 異常躲履。


public void write(byte[ ] b,int off,int len) throws IOException

把參數(shù) b 指定的字節(jié)數(shù)組中的若干字節(jié)寫(xiě)到輸出流 , 參數(shù) off 指定字節(jié)數(shù)組的起始下標(biāo) ,從這個(gè)位置開(kāi)始輸出由參數(shù) len 指定數(shù)目的字節(jié)。如果發(fā)生某個(gè) I/O 錯(cuò)誤 , 則拋出 IOException 異常聊闯。


public void flush( ) throws IOException

刷新當(dāng)前輸出流 , 將任何緩沖輸出的字節(jié)輸出到此流中工猜。 OutputStream 的 flush() 方法不做任何事。它的一些帶有緩沖區(qū)的子類(lèi)覆蓋了flush() 方法菱蔬。通過(guò)帶緩沖區(qū)的輸出流寫(xiě)數(shù)據(jù)時(shí), 數(shù)據(jù)先保存在緩沖區(qū)中 , 積累到一定程度才會(huì)真正寫(xiě)到輸出流中篷帅。緩沖區(qū)通常用字節(jié)數(shù)組實(shí)現(xiàn), 實(shí)際上是指一塊內(nèi)存空間。 flush() 方法強(qiáng)制把緩沖區(qū)內(nèi)的數(shù)據(jù)寫(xiě)到輸出流中拴泌。如果發(fā)生某個(gè)I/O 錯(cuò)誤 , 則拋出 IOException 異常魏身。


public void close( ) throws IOException

關(guān)閉當(dāng)前輸出流 , 且釋放與它相關(guān)的任一系統(tǒng)資源。 OutputStream 的 close() 方法不做任何事蚪腐。如果發(fā)生某個(gè)I/O 錯(cuò)誤 , 則拋出 IOException 異常箭昵。

3.FileInputStream

InputStream 的派生類(lèi) , 完成從文件中讀取字節(jié)數(shù)據(jù)。其基本步驟是:

*?建立文件輸入流回季;

*?讀入字節(jié)數(shù)據(jù)家制;

*?關(guān)閉正林。

重要方法:


public FileinputStream(String name) throws FileNotFoundException

創(chuàng)建一個(gè)輸入文件流 , 從 name 指定名稱(chēng)的文件讀取數(shù)據(jù)。 name 中包含了文件路徑信息颤殴。如果找不到指定文件, 則拋出 FileNotFoundException 異常觅廓。

public FileinputStream(File file) throws FileNotFoundException

創(chuàng)建一個(gè)輸入文件流 , 從指定的 File 對(duì)象讀取數(shù)據(jù)。


import java.io.File;

import java.io.FileInputStream;

public class FileInputStreamTest {

public static void main(String[] args) {

String s="";

int i;

try{

//建立起文件輸入流 , 注意 \\ 為對(duì) \ 的轉(zhuǎn)義

FileInputStream in=new FileInputStream("c:\\demo.txt");

//利用循環(huán)依次讀取文件中的所有字節(jié)

while((i=in.read())!=-1){

//強(qiáng)制將字節(jié)轉(zhuǎn)換成字符

s=s+(char)i;

}

}catch(Exception e){

s="文件未找到 ";

}

System.out.println(s);

}

}

如果文件很大 , 為了提高讀文件的效率 , 可以利用 read(byte[ ] buff) 方法 , 它能減少物理讀文件的次數(shù)诅病。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市粥烁,隨后出現(xiàn)的幾起案子贤笆,更是在濱河造成了極大的恐慌,老刑警劉巖讨阻,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件芥永,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡钝吮,警方通過(guò)查閱死者的電腦和手機(jī)埋涧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)奇瘦,“玉大人棘催,你說(shuō)我怎么就攤上這事《辏” “怎么了醇坝?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)次坡。 經(jīng)常有香客問(wèn)我呼猪,道長(zhǎng),這世上最難降的妖魔是什么砸琅? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任宋距,我火速辦了婚禮,結(jié)果婚禮上症脂,老公的妹妹穿的比我還像新娘谚赎。我一直安慰自己,他們只是感情好诱篷,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布沸版。 她就那樣靜靜地躺著,像睡著了一般兴蒸。 火紅的嫁衣襯著肌膚如雪视粮。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,365評(píng)論 1 302
  • 那天橙凳,我揣著相機(jī)與錄音蕾殴,去河邊找鬼笑撞。 笑死,一個(gè)胖子當(dāng)著我的面吹牛钓觉,可吹牛的內(nèi)容都是我干的茴肥。 我是一名探鬼主播,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼荡灾,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼瓤狐!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起批幌,我...
    開(kāi)封第一講書(shū)人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤础锐,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后荧缘,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體皆警,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年截粗,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了信姓。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡绸罗,死狀恐怖意推,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情珊蟀,我是刑警寧澤左痢,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站系洛,受9級(jí)特大地震影響俊性,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜描扯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一定页、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧绽诚,春花似錦典徊、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至蜂桶,卻和暖如春儡毕,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工腰湾, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留雷恃,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓费坊,卻偏偏與公主長(zhǎng)得像倒槐,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子附井,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354

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