2020-05-05

Day-34,35? File類? I/O流

1茶行、File類的基本屬性

定義:文件和目錄的路徑名的抽象表示形式巴碗。

位置:java.io包下。

繼承關(guān)系:public class? File? extends? Object? implements? Serializable , Comparable<File>

(這個(gè)類主要折騰文件/文件夾的路徑局待,不操作文件內(nèi)容)

1.1亡问、絕對(duì)路徑和相對(duì)路徑

相對(duì)路徑:相對(duì)于當(dāng)前文件夾的路徑,eg:C:\Program Files\Java瑞眼。Java文件夾相對(duì)于Program Files文件夾的相對(duì)路徑為 \Java龙宏。

絕對(duì)路徑:從根盤符開始描述的路徑。eg:C:\Program Files\Java

路徑分隔符

Windows操作系統(tǒng): \伤疙,反斜杠

Linux macOS操作系統(tǒng)分隔符:/银酗,斜杠

Windows系統(tǒng)是支持Linux分隔符:

eg:C:/Ruby/pro/aa.jpeg

System.out.println(File.pathSeparator); //?? ;

System.out.println(File.separator);?????? //????? \

1.3 辆影、File類的構(gòu)造方法

File(String pathname) ;

通過將給定的路徑名字符串轉(zhuǎn)換為抽象路徑名來創(chuàng)建新的 File類實(shí)例。

File(String parent, String child) ;//parent:C:\Ruby\pro,child:aa.jpeg

從父路徑名字符串和子路徑名字符串創(chuàng)建新的 File類實(shí)例黍特。

File(File parent, String child)

從父抽象路徑名和子路徑名字符串創(chuàng)建新的 File類實(shí)例蛙讥。

1.4、File類的常用方法

1.4.1灭衷、新建文件或文件夾

1次慢、createNewFile()--->boolean

通過File類對(duì)象來調(diào)用,創(chuàng)建該對(duì)象所對(duì)應(yīng)的目錄文件翔曲。

如果返回true迫像,創(chuàng)建成功,否則就是創(chuàng)建失斖椤闻妓;

如果文件已經(jīng)存在,無法創(chuàng)建成功掠械;

但是如果文件所在的文件夾都沒有由缆,無法創(chuàng)建成功。

2猾蒂、boolean mkdir()

創(chuàng)建由此抽象路徑名命名(File類的對(duì)象)的目錄均唉,僅創(chuàng)建一層。

? ? 如果文件夾已經(jīng)存在肚菠,那么創(chuàng)建失敗

3舔箭、boolean mkdirs() ;//厲害

創(chuàng)建由此抽象路徑名命名的目錄,包括任何必需但不存在的父目錄蚊逢。

4限嫌、boolean renameTo(File dest)

重命名由此抽象路徑名表示的文件

? ? 可以重命名,還可以剪切

1.4.2时捌、刪除文件或文件夾

遍歷文件夾:只針對(duì)目錄來講,不能對(duì)文件操作炉抒,否則返回null奢讨。

1、boolean delete()

刪除由此抽象路徑名表示的文件或目錄焰薄。

如果文件不存在拿诸,刪除失敗

還可以刪除文件夾:但是只能刪除空文件夾,(如果文件夾中有內(nèi)容塞茅,不會(huì)直接刪除的亩码,是一種保護(hù)機(jī)制)

2、void deleteOnExit()

請(qǐng)求在虛擬機(jī)終止時(shí)刪除由此抽象路徑名表示的文件或目錄

? ? 程序要退出了:刪除程序執(zhí)行過程中野瘦,產(chǎn)生的日志文件描沟,緩沖文件飒泻。。吏廉。

1.4.3泞遗、遍歷文件夾

1、String[] list()

返回一個(gè)字符串?dāng)?shù)組席覆,命名由此抽象路徑名表示的目錄中的文件和目錄史辙。?

2、File[] listFiles()

返回一個(gè)抽象路徑名數(shù)組佩伤,表示由該抽象路徑名表示的目錄中的文件聊倔。

3、File[] listFiles(FileFilter filter)

返回一個(gè)抽象路徑名數(shù)組生巡,表示由此抽象路徑名表示的滿足指定過濾器的目錄中的文件和目錄耙蔑。?

? ? 自已定義過濾的規(guī)則,實(shí)現(xiàn)FileFilter接口即可障斋。

? ? 接口中:public boolean accept(File pathname)-->boolean纵潦,

? ? 原理:將目錄下的所有的子文件和文件夾,都作為accept()方法的參數(shù),一個(gè)一個(gè)的判斷,如果返回true疤坝,就是我們要的魏颓。返回false,就是不要的秩伞。

1.4.4、其他方法

1、exists();? //判斷File類的對(duì)象所表示文件或文件夾秸谢,是否存在

2、boolean isFile()? //測試此抽象路徑名表示的文件是否為普通文件

3霹肝、boolean isDirectory()? //測試此抽象路徑名表示的文件是否為目錄估蹄。

4、boolean isAbsolute()? //測試這個(gè)抽象路徑名是否是絕對(duì)的沫换。?

5臭蚁、String getName()? //返回由此抽象路徑名表示的文件或目錄的名稱。

6讯赏、String getPath()?? //將此抽象路徑名轉(zhuǎn)換為路徑名字符串垮兑。

7、String getAbsolutePath()? //返回此抽象路徑名的絕對(duì)路徑名字符串漱挎。

8系枪、File getAbsoluteFile()?? //返回此抽象路徑名的絕對(duì)形式。?

9磕谅、String getParent()?? //返回此抽象路徑名的父 null的路徑名字符串私爷,如果此路徑名未命名為父目錄雾棺,則返回null。?

10当犯、File getParentFile()?? //返回此抽象路徑名的父垢村,或抽象路徑名 null如果此路徑名沒有指定父目錄。

11嚎卫、long length()?? //返回由此抽象路徑名表示的文件的長度嘉栓。 以字節(jié)為單位。

? ? bit:位拓诸,0,1

? ? byte:字節(jié)侵佃,8個(gè)bit。

? ? kb:1024個(gè)字節(jié)

? ? mb:

12奠支、long lastModified()?? //返回此抽象路徑名表示的文件上次修改的時(shí)間馋辈。

2、I/O流

2.1基本概念

I/O流:通過I(input倍谜,輸入)和O(output迈螟,輸出)操作實(shí)現(xiàn)數(shù)據(jù)的傳輸;流的是數(shù)據(jù)尔崔。以(字節(jié)/字符)答毫。

用途:將數(shù)據(jù)從一個(gè)地方流到另一個(gè)地方。例如:將本地文件中的數(shù)據(jù)----->程序中季春;程序中----->保存到文件中洗搂;網(wǎng)絡(luò)上的數(shù)據(jù)------>電腦某個(gè)程序中

流的分類:

根據(jù)流向分為輸入流(數(shù)據(jù)從外部進(jìn)入到程序中)和輸出流(數(shù)據(jù)從程序中出去);

根據(jù)單位分為字節(jié)流(以字節(jié)為單位载弄。 核心:所有類型的文件)和字符流(以字符為單位耘拇。——>文本信息)

根據(jù)功能分為節(jié)點(diǎn)流(直接結(jié)束數(shù)據(jù)源的流)和處理流(又叫過濾流宇攻。套在流上的流)

IO流的4大基類:

InputStream字節(jié)輸入流

OutputStream字節(jié)輸出流

Reader字符輸入流

Writer字符輸出流

注意:這四個(gè)基類都是抽象類

圖1:四大基類結(jié)構(gòu)

2.2惫叛、FileInputStream

2.2.1、構(gòu)造方法

FileInputStream(String name)

通過打開與實(shí)際文件的連接來創(chuàng)建一個(gè) FileInputStream 逞刷,該文件由文件系統(tǒng)中的路徑名 name命名挣棕。

FileInputStream(File file)

通過打開與實(shí)際文件的連接創(chuàng)建一個(gè) FileInputStream ,該文件由文件系統(tǒng)中的 File對(duì)象 file命名亲桥。

2.2.2、常用方法

read()-->int

每次讀取一個(gè)字節(jié)固耘。返回值就是讀入的數(shù)據(jù)本身题篷。如果讀到文件的末尾了,-1厅目。

read()

read(byte[] bs)-->int

每次讀取多個(gè)字節(jié)番枚,最多是bs數(shù)組的長度個(gè)法严。返回值是本次讀取的實(shí)際的字節(jié)個(gè)數(shù)。如果到達(dá)末尾葫笼,-1.

read(byte[] bs)

int read(byte[] bs, int off, int len)

從該輸入流讀取最多 len字節(jié)的數(shù)據(jù)為字節(jié)數(shù)組 深啤。第一個(gè)參數(shù)表示要存儲(chǔ)本地讀取的數(shù)據(jù)的數(shù)組,第二個(gè)參數(shù)路星,表示從哪個(gè)下標(biāo)開始存儲(chǔ)溯街,第三個(gè)參數(shù)是表示本次讀取預(yù)計(jì)的讀取數(shù)量。該方法的返回值是本次讀取的實(shí)際數(shù)量洋丐。如果到達(dá)文件末尾呈昔,-1。

byte[] bs = new byte[3];//內(nèi)存資源

例如:

數(shù)據(jù)源:250個(gè)字節(jié)

數(shù)組:100個(gè)長度

????????? 1次:100友绝,剩150 讀取100個(gè)

?????????? 2次:100堤尾,剩50 讀取100個(gè)

?????????? 3次:50,讀完了 讀取50個(gè)

int read(byte[] bs) -->讀多個(gè)迁客,最多數(shù)組長度郭宝,實(shí)際看返回值,數(shù)據(jù)在數(shù)組中掷漱,將讀取到的數(shù)據(jù)存入到數(shù)組中粘室,默認(rèn)從頭開始存儲(chǔ)。

2.3切威、FileOutputStream

2.3.1育特、構(gòu)造方法

FileOutputStream(String name) ,在文件開頭寫,擦除寫

創(chuàng)建文件輸出流以指定的名稱寫入文件先朦。

FileOutputStream(String name, boolean append) 缰冤,在文件的末尾寫數(shù)據(jù),追加

創(chuàng)建文件輸出流以指定的名稱寫入文件喳魏。

FileOutputStream(File file) 棉浸,在文件開頭寫,擦除寫

創(chuàng)建文件輸出流以寫入由指定的 File對(duì)象表示的文件刺彩。

FileOutputStream(File file, boolean append) 迷郑,在文件的末尾寫數(shù)據(jù),追加

創(chuàng)建文件輸出流以寫入由指定的 File對(duì)象表示的文件创倔。

2.2.1嗡害、常用方法

void write(int data),將參數(shù)畦攘,這個(gè)字節(jié)數(shù)據(jù)寫出去

void write(byte[] b),將 b.length個(gè)字節(jié)從指定的字節(jié)數(shù)組寫入此文件輸出流霸妹。

void write(byte[] b, int off, int len) ,將 len字節(jié)從位于偏移量 off的指定字節(jié)數(shù)組寫入此文件輸出流。

寫出去的數(shù)據(jù)知押,是清空寫叹螟。將文件中原來的數(shù)據(jù)全部擦除鹃骂,從頭開始寫數(shù)據(jù)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市罢绽,隨后出現(xiàn)的幾起案子畏线,更是在濱河造成了極大的恐慌,老刑警劉巖良价,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件寝殴,死亡現(xiàn)場離奇詭異,居然都是意外死亡棚壁,警方通過查閱死者的電腦和手機(jī)杯矩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來袖外,“玉大人史隆,你說我怎么就攤上這事÷椋” “怎么了泌射?”我有些...
    開封第一講書人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長鬓照。 經(jīng)常有香客問我熔酷,道長,這世上最難降的妖魔是什么豺裆? 我笑而不...
    開封第一講書人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任拒秘,我火速辦了婚禮,結(jié)果婚禮上臭猜,老公的妹妹穿的比我還像新娘躺酒。我一直安慰自己,他們只是感情好蔑歌,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開白布羹应。 她就那樣靜靜地躺著,像睡著了一般次屠。 火紅的嫁衣襯著肌膚如雪园匹。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,554評(píng)論 1 305
  • 那天劫灶,我揣著相機(jī)與錄音裸违,去河邊找鬼。 笑死本昏,一個(gè)胖子當(dāng)著我的面吹牛供汛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼紊馏,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蒲犬?” 一聲冷哼從身側(cè)響起朱监,我...
    開封第一講書人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎原叮,沒想到半個(gè)月后赫编,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡奋隶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年擂送,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片唯欣。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡嘹吨,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出境氢,到底是詐尸還是另有隱情蟀拷,我是刑警寧澤,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布萍聊,位于F島的核電站问芬,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏寿桨。R本人自食惡果不足惜此衅,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望亭螟。 院中可真熱鬧挡鞍,春花似錦、人聲如沸媒佣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽默伍。三九已至欢嘿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間也糊,已是汗流浹背炼蹦。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留狸剃,地道東北人掐隐。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親虑省。 傳聞我的和親對(duì)象是個(gè)殘疾皇子匿刮,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355