大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專(zhuān)注Java教育14年 全國(guó)咨詢/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁(yè) 學(xué)習(xí)攻略 Java常用io文件流的基本使用

Java常用io文件流的基本使用

更新時(shí)間:2020-06-01 16:15:13 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽2382次

所謂的IO即Input(輸入)/Output(輸出),當(dāng)軟件與外部資源(例如:網(wǎng)絡(luò),數(shù)據(jù)庫(kù),磁盤(pán)文件)交互的時(shí)候,就會(huì)用到IO操作。而在IO操作中,最常用的一種方式就是流,也被稱為IO流。IO操作比較復(fù)雜,涉及到的系統(tǒng)調(diào)用比較多,相對(duì)操作內(nèi)存而言性能很低。然而值得興奮的是,Java提供了很多實(shí)現(xiàn)類(lèi)以滿足不同的使用場(chǎng)景,這樣的實(shí)現(xiàn)類(lèi)有很多,我只挑選些在日常編碼中經(jīng)常用到的類(lèi)進(jìn)行說(shuō)明,本節(jié)主要介紹和文件操作相關(guān)的流,下面一起來(lái)瞧瞧吧。

Java常用io文件流的基本使用

FileOutputStream&FileInputStream字節(jié)流

File只是能操作文件或文件夾,但是并不能操作文件中的內(nèi)容,要想操作文件的內(nèi)容就需要使用文件IO流,其操作文件的內(nèi)容主要有兩種方式:以字節(jié)的方式和以字符的方式。而該小節(jié)主要講以字節(jié)文件流的形式操作文件內(nèi)容,以字符文件流的方式操作我留到下一小節(jié)進(jìn)行說(shuō)明。

在Java中以字節(jié)流的形式操作文件內(nèi)容的類(lèi)主要是FileOutputStream和FileInputStream。分別是OutputStream(字節(jié)輸出流)和InputStream(字節(jié)輸入流)抽象基類(lèi)的子類(lèi)。下面以圖片的復(fù)制來(lái)展示下該流的用法。

File?sourceFile?=?new?File("sourceFile.jpg");?
File?destFile?=?new?File("destFile.jpg");
FileInputStream?fis=null;?//?讀取源文件的流
FileOutputStream?fos?=?null;?//?輸出到目標(biāo)文件的流
try?{
?fis?=?new?FileInputStream(sourceFile);
?fos?=?new?FileOutputStream(destFile);
?byte[]?bytes=?new?byte[1024];
?int?len?=?0;
?while((len=fis.read(bytes))!=-1)?{
?fos.write(bytes,?0,?len);
?}
}
catch(IOException?ex)?{}
finally?{
?try?{?fis.close();}?catch(IOException?ex)?{}?
?try?{?fos.close();}?catch(IOException?ex)?{}?
}

在使用FileOutputStream和FileInputStream的過(guò)程中需要注意的地方:

FileInputStream所要操作的文件必須存在,否則就會(huì)拋出異常。而FileOutputStream寫(xiě)入的目的文件則不需要存在,當(dāng)不存在時(shí)會(huì)被創(chuàng)建,存在的時(shí)候會(huì)被覆蓋,也可以使用FileOutputStream造函數(shù)的第二個(gè)參數(shù),來(lái)實(shí)現(xiàn)追加文件內(nèi)容。

在使用FileInputStream讀取字節(jié)的時(shí)候,當(dāng)讀取到字節(jié)的末尾,再繼續(xù)讀取,無(wú)論多少次都會(huì)返回-1,而返回值len表示本次讀取了多少個(gè)字節(jié)。通常情況下每次讀取1024個(gè)字節(jié),可以達(dá)到空間和時(shí)間的平衡。但是具體情況也是需要具體分析的。

字節(jié)流是不存在緩沖區(qū)的,所以不需要使用flush操作刷新緩沖區(qū),字節(jié)的讀取和寫(xiě)入都是通過(guò)操作系統(tǒng)來(lái)實(shí)現(xiàn)的。

只要是流就是需要關(guān)閉的,無(wú)論是否在異常情況下都需要關(guān)閉流,防止占用系統(tǒng)資源,導(dǎo)致其他程序無(wú)法對(duì)該文件進(jìn)行操作。但是在關(guān)閉流的時(shí)候也有可能會(huì)報(bào)異常,所以也需要try...catch。

FileOutputStream和FileInputStream主要用來(lái)操作字節(jié)表現(xiàn)形式的文件,例如圖片,可執(zhí)行程序等。當(dāng)然操作字符表現(xiàn)形式的文件也是沒(méi)有問(wèn)題的,只不過(guò)這么干不規(guī)范。

OutputStreamWriter&InputStreamReader

這小節(jié)主要講以字符流的形式操作文件,在Java中對(duì)應(yīng)操作的主要類(lèi)為OutputStreamWriter和InputStreamReader。有時(shí)候又稱它們?yōu)檗D(zhuǎn)換流,具體原因一會(huì)在說(shuō),先看一個(gè)例子。

File?sourceFile?=?new?File("sourceFile.txt");
File?destFile?=?new?File("destFile.txt");
?
FileInputStream?fis=?new?FileInputStream(sourceFile);
FileOutputStream?fos?=?new?FileOutputStream(destFile);?
InputStreamReader?reader=null;
OutputStreamWriter?writer=null;
try?{
?reader=?new?InputStreamReader(fis,"utf-8");
?writer?=new?OutputStreamWriter(fos,"gbk");
?char[]?cbuf?=new?char[1024];
?int?len=0;
?while((len=reader.read(cbuf))!=-1)?{
?System.out.println(String.copyValueOf(cbuf,0,len));
?writer.write(cbuf,?0,?len);
?}
}
catch(IOException?ex)?{
?try{reader.close();}catch(IOException?ex)?{?}
?try{writer.close();}catch(IOException?ex)?{?}
}

上述示例主要實(shí)現(xiàn)了一個(gè)文件的復(fù)制,與字節(jié)流的使用方式不同的是,字符流的構(gòu)造函數(shù)需要傳遞字節(jié)流和編碼格式。這是因?yàn)椴僮魑募?nèi)容都是以字節(jié)的形式來(lái)操作的。字符輸入流根據(jù)編碼表對(duì)字節(jié)流讀取的字節(jié)轉(zhuǎn)義成字符,同時(shí)也說(shuō)明了傳遞編碼表格式參數(shù)的重要性。如果被讀取文件編碼格式是UTF-8且不傳遞這個(gè)參數(shù),那么這個(gè)參數(shù)為操作系統(tǒng)的默認(rèn)編碼表(對(duì)于Windows而言是GBK),如果默認(rèn)的編碼表與UTF-8不同(與系統(tǒng)編碼表格式相同,可不傳遞此參數(shù)),在轉(zhuǎn)義為字符的過(guò)程中就會(huì)出現(xiàn)問(wèn)題。假如文件內(nèi)容為“好”,在UTF-8中對(duì)應(yīng)的字節(jié)為-10-20-30。那么就以系統(tǒng)的默認(rèn)編碼表來(lái)轉(zhuǎn)義,假如默認(rèn)為GBK,“好”字的編碼為-50-60,由原來(lái)3個(gè)字節(jié)表示漢字,現(xiàn)在變成了2個(gè)字節(jié)表示漢字,又由于編碼表不兼容,所以導(dǎo)致出現(xiàn)亂碼。而在使用字符輸出流的時(shí)候,將字符按照編碼表參數(shù)轉(zhuǎn)化為字節(jié)后再寫(xiě)入對(duì)應(yīng)編碼格式的文件中去。如果輸出的內(nèi)容是以追加的方式,那么需要保證前后兩個(gè)輸出文件內(nèi)容的編碼格式一樣,否則也會(huì)出現(xiàn)亂碼。假如之前的輸出文件是GBK格式,你使用字符輸出流輸出的字符格式為UTF8并追加到文件中去,這個(gè)時(shí)候亂碼就產(chǎn)生了。綜上過(guò)程,也就知道大家為什么又稱FileOutputStream和InputStreamReader為轉(zhuǎn)換流了。

傳遞給字符流的字節(jié)流不需要單獨(dú)的進(jìn)行關(guān)系,在字符流關(guān)閉的時(shí)候會(huì)調(diào)用字節(jié)流的close()方法。

Java常用io文件流的基本使用

以上就是動(dòng)力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)的小編針對(duì)“Java常用io文件流的基本使用”的內(nèi)容進(jìn)行的回答,希望對(duì)大家有所幫助,如有疑問(wèn),請(qǐng)?jiān)诰€咨詢,有專(zhuān)業(yè)老師隨時(shí)為你服務(wù)。

提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 国产乱码一区二区三区 | 久久一本一区二区三区 | 九色综合网 | 久久久久香蕉 | 99热久久国产精品这里有6 | 在线播放五十路乱中文 | 国产黄mmd在线观看免费 | 色老头xxxwww作爱视频 | 性欧美高清久久久久久久 | 国产一区二区在线视频观看 | 午夜在线播放免费高清观看 | 亚洲香蕉久久一区二区三区四区 | 久久成人免费播放网站 | 国产黄色自拍视频 | 高清毛片免费看 | 一区二区三区乱码 | 波多野结衣一区二区 三区 波多野结衣一区二区三区 波多野结衣一区二区三区高清在线 | 国产成人精品亚洲一区 | 欧美jizzhd精品欧美4k | 国产精品国产三级国快看 | 久久se精品一区二区影院 | 亚洲欧美一区二区三区不卡 | 悠久久 | 超碰最新上传 | 亚洲欧美日韩精品中文乱码 | 一本一本久久α久久精品66 | 九九在线偷拍视频在线播放 | 国产青草亚洲香蕉精品久久 | 亚洲欧美综合一区二区三区四区 | 欧美成人网在线综合视频 | 四虎成人国产精品视频 | 日操夜操天天操 | 免费精品国产 | 亚洲免费一区 | 视频一区久久 | 国产三级日产三级日本三级 | 四虎私人影院 | 欧美日韩在线成人免费视频大全 | 免费看h片网站 | 天天操天天干天天玩 | 国产日韩网站 |