基礎(chǔ)IO操作–文件夾以及文件的復(fù)制(一)
文件內(nèi)容的讀寫
我們存儲文件有很多種方式:
變量:只能存儲一份
數(shù)組 存儲好多了 類型統(tǒng)一
集合 存儲好多個 存儲后個數(shù)還能改變 范型—數(shù)據(jù)類型統(tǒng)一
如上三個都是java中的類型(對象–>內(nèi)存)
都存儲在內(nèi)存中 程序執(zhí)行完畢 虛擬機(jī)停止的時候 內(nèi)存空間會被回收 數(shù)據(jù)都是臨時性存儲的
文件 存儲好多信息
文件是存儲在硬盤上的—>永久性保存
數(shù)據(jù)雖然是安全了觅彰,文件畢竟不在內(nèi)存中考榨,通過IO操作文件
在此我們主要是歸納了字節(jié)型文件流的基本操作與方法
對于不同的類型的字節(jié)流,其基本操作都大致相同产艾,因此我們在此只歸納了有關(guān)字節(jié)型的文件流。
字節(jié)型輸入流—>FileInputStream
有三種構(gòu)造器翘单,我們主要是其中兩種構(gòu)造器:
調(diào)用一個帶file類型的構(gòu)造方法
調(diào)用一個帶string類型的構(gòu)造方法
輸入流的常用方法:
從官方所給的文檔我們可以看出定铜,輸入流的方法并不多矮锈,其中最重要的方法也說了三遍---->read
read()方法返回為int型豺旬,它表示的是你讀取的字節(jié)的大小钠惩,從重載的方法我們可以看出,read()方法允許接受一個byte數(shù)組族阅,這到底是為了什么呢篓跛?
我們知道,字節(jié)型輸入流默認(rèn)的是我們從文件中每次讀取一個字節(jié)的內(nèi)容坦刀。
舉個例子來說愧沟,加入你正在吃午飯蔬咬,你的文件就是整個鍋里的米飯,而你使用字節(jié)型輸入流時沐寺,默認(rèn)的read()方法就是指你每次只能一粒一粒的從鍋里盛取米飯计盒。如果該文件特別大,那就是說你所花費的時間特別多芽丹,因此當(dāng)我給你一個byte[]數(shù)組時,就相當(dāng)于給了你一個鏟子卜朗,這個鏟子的大小你自己可以選擇(通常在1kb~8kb之間)拔第,那么很容易理解,你每次產(chǎn)出的米粒個數(shù)就和你的鏟子的大小有關(guān)了场钉。
上述代碼是我們的一般步驟蚊俺,但是在實際操作時我們需要注意代碼的健壯性:
文件是否存在?
文件是否關(guān)閉逛万?
因此我們在實際操作時泳猬,我們需要注意相關(guān)的一些小細(xì)節(jié)。
下面我們看一下實際運行時的問題:
其中Test.txt文件如下所示:
那么我們的輸出是什么呢宇植?
我們可以發(fā)現(xiàn)這并不是我們想要的結(jié)果 多出來的13 10到底是什么呢得封?
可以看到我們的文件其實每一行都多出來了 一個回車與換行(\r, \n)
這導(dǎo)致了我們每次輸出的value值都多出來了兩個字節(jié)。
那么我們再看一下用數(shù)組處理輸入流的代碼:
需要注意的是指郁,這次我們返回的value不再是一個字節(jié)忙上,而是字節(jié)的個數(shù),你可以使用循環(huán)輸出每一個字節(jié)闲坎,也可以直接入上述代碼一樣將其輸出疫粥。
輸出結(jié)果為:
我們的主函數(shù)為:
我們可以看到云用數(shù)組相對于更加符合實際,但是如果我們把數(shù)組的大小改為4又會發(fā)生什么呢腰懂?
造成這樣的原因是什么呢梗逮?
謝謝!如果有不好的地方請?zhí)岢?br>
————————————————
版權(quán)聲明:本文為CSDN博主「T.M.」的原創(chuàng)文章绣溜,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議慷彤,轉(zhuǎn)載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/tongmengww/article/details/103035582