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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人文社科 > 生活经验 >内容正文

生活经验

关于文件流的使用

發(fā)布時(shí)間:2023/11/27 生活经验 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于文件流的使用 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文件流共有四類(lèi),(FileOutputStream)文件字節(jié)輸出流,(FileInputStream)文件字節(jié)輸入流,(FileWriter)文件字符輸出流,(FileReader)文件字符輸入流。

輸入流是用來(lái)從文件中讀取數(shù)據(jù)到內(nèi)存中,輸出流的作用是寫(xiě)入數(shù)據(jù)到文件中。

先看(FileOutputStream)文件字節(jié)輸出流:

           try {
//                FileOutputStream out=new FileOutputStream(path);  如果只傳入一個(gè)參數(shù)path,則第二個(gè)參數(shù)默認(rèn)為false,即原文件內(nèi)容會(huì)新的寫(xiě)入的內(nèi)容被覆蓋out=new FileOutputStream(path,true);  //如果后面參數(shù)為true,則在原內(nèi)容基礎(chǔ)上append新內(nèi)容String s="hello world";
//                out.write(s.getBytes());   將字符串轉(zhuǎn)換為字節(jié)數(shù)組,然后寫(xiě)到文件中out.write(s.getBytes(),0,5);  //表示只讀取數(shù)組中的0到5位} catch (IOException e) {e.printStackTrace();}finally {try {if(out!=null){out.close();  //不要忘記關(guān)閉流    
                      }} catch (IOException e) {e.printStackTrace();}}

注意這里的 path 的上級(jí)文件夾一定要全部都存在,否則會(huì)報(bào)錯(cuò),提示找不到文件路徑。

?

(FileInputStream)文件字節(jié)輸入流

        FileInputStream in=null;try {
//            File f=new File(path);
//            in=new FileInputStream(f);  //可傳入File對(duì)象in=new FileInputStream(path);  //也可直接傳入pathint i;while((i=in.read())!=-1) {   //in.read()每次返回?cái)?shù)據(jù)中的一個(gè)字節(jié),當(dāng)讀到結(jié)束,會(huì)返回-1System.out.print((char)i);  //將字節(jié)轉(zhuǎn)換為字符,然后讀出
            }} catch (IOException e) {e.printStackTrace();}finally {try {if(in!=null){in.close();  //關(guān)閉流    
                }} catch (IOException e) {e.printStackTrace();}}

該方法將數(shù)據(jù)一個(gè)字節(jié)一個(gè)字節(jié)地讀取出來(lái)

還有一個(gè)方法是建立一個(gè)byte數(shù)組,將該數(shù)組作為緩沖區(qū)將數(shù)據(jù)一段一段的讀出

        FileInputStream in=null;try {
//            File f=new File(path);
//            in=new FileInputStream(f);  //可傳入File對(duì)象in=new FileInputStream(path);  //也可直接傳入pathbyte[] buffer=new byte[1024];  //創(chuàng)建一個(gè)1024K的byte數(shù)組
//            int len = in.read(buffer);     // 注意,當(dāng)read()方法中傳入數(shù)組時(shí),返回的值就變成了 讀取的數(shù)據(jù)的長(zhǎng)度,而不是返回?cái)?shù)據(jù)中的一個(gè)字節(jié)       
//            System.out.println(new String(buffer,0,len));  //根據(jù)讀取的數(shù)據(jù)的長(zhǎng)度打印出數(shù)據(jù)內(nèi)容,這樣就把多余的緩存區(qū)的空格省略掉了System.out.println(new String(buffer).trim());  //也可以直接使用trim()方法去掉空格,和上面一行代碼效果相同} catch (IOException e) {e.printStackTrace();}finally {try {if(in!=null){in.close();  //關(guān)閉流    
                }} catch (IOException e) {e.printStackTrace();}}

?

?

(FileOutputStream)文件字節(jié)輸出流和(FileInputStream)文件字節(jié)輸入流結(jié)合使用的案例:

把一個(gè)文件的內(nèi)容讀出,然后存到存入另一個(gè)文件中

        String path2="C://Users/wcl/Desktop/demo2.txt";FileInputStream in=null;FileOutputStream out=null;try {in=new FileInputStream(path);out=new FileOutputStream(path2);byte[] buffer=new byte[1024];int len;
//            while((len=in.read(buffer))!=-1){        //一直向數(shù)組中讀取數(shù)據(jù)
//                String s=new String(buffer).trim();  //先從byte數(shù)組中取出轉(zhuǎn)化為String型
//                out.write(s.getBytes(), 0, len);      //再將字符串轉(zhuǎn)換成byte型數(shù)據(jù),寫(xiě)入文件中
//            }len=in.read(buffer);                  //也可以先獲取讀取文件的長(zhǎng)度for (int i = 0; i < len; i++) {       //然后for循環(huán)從byte數(shù)組中取出數(shù)據(jù)寫(xiě)入demo2.txt文件中,和上面的效果相同out.write(buffer[i]);}
out.flush(); //把緩沖區(qū)內(nèi)容強(qiáng)制寫(xiě)出,清空緩沖區(qū),防止有剩余數(shù)據(jù)未寫(xiě)出}
catch (IOException e) {e.printStackTrace();}finally {try {if(out!=null){out.close();}if(in!=null){in.close();}} catch (IOException e) { e.printStackTrace();}}

?

使用字符輸入流和字節(jié)輸入流的操作和字節(jié)流基本相同,只不過(guò)字節(jié)流是以 byte 為基本單元,而字符流是以 char 為基本單元。

不過(guò)我們要注意一下兩者使用的場(chǎng)景,一般當(dāng)我們?cè)谔幚?音頻文件、圖片 等類(lèi)型的文件時(shí),一般用字節(jié)流。而如果是處理中文內(nèi)容的,最好使用字符流。

?

以下內(nèi)容為從網(wǎng)上收集:

字符流處理的單元為2個(gè)字節(jié)的Unicode字符,分別操作字符、字符數(shù)組或字符串,而字節(jié)流處理單元為1個(gè)字節(jié),?操作字節(jié)和字節(jié)數(shù)組。所以字符流是由Java虛擬機(jī)將字節(jié)轉(zhuǎn)化為2個(gè)字節(jié)的Unicode字符為單位的字符而成的,所以它對(duì)多國(guó)語(yǔ)言支持性比較好!如果是?音頻文件、圖片、歌曲,就用字節(jié)流好點(diǎn),如果是關(guān)系到中文(文本)的,用字符流好點(diǎn).?
?????所有文件的儲(chǔ)存是都是字節(jié)(byte)的儲(chǔ)存,在磁盤(pán)上保留的并不是文件的字符而是先把字符編碼成字節(jié),再儲(chǔ)存這些字節(jié)到磁盤(pán)。在讀取文件(特別是文本文件)時(shí),也是一個(gè)字節(jié)一個(gè)字節(jié)地讀取以形成字節(jié)序列.?
??????字節(jié)流可用于任何類(lèi)型的對(duì)象,包括二進(jìn)制對(duì)象,而字符流只能處理字符或者字符串;?2.?字節(jié)流提供了處理任何類(lèi)型的IO操作的功能,但它不能直接處理Unicode字符,而字符流就可以。

轉(zhuǎn)載于:https://www.cnblogs.com/weimore/p/7253212.html

總結(jié)

以上是生活随笔為你收集整理的关于文件流的使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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