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è)基類都是抽象類
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(byte[] bs)-->int
每次讀取多個(gè)字節(jié)番枚,最多是bs數(shù)組的長度個(gè)法严。返回值是本次讀取的實(shí)際的字節(jié)個(gè)數(shù)。如果到達(dá)末尾葫笼,-1.
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ù)