Java基礎(chǔ)之文件和目錄操作
一、前言
文件和目錄操作最終是與操作系統(tǒng)和文件系統(tǒng)相關(guān)的,不同系統(tǒng)的 實(shí)現(xiàn)是不一樣的,但Java中的java.io.File類提供了統(tǒng)一的接口,底層會(huì) 通過本地方法調(diào)用操作系統(tǒng)和文件系統(tǒng)的具體實(shí)現(xiàn),本節(jié),我們就來介 紹File類。File類中的操作大概可以分為三類:文件元數(shù)據(jù)、文件操作、 目錄操作,在介紹這些操作之前,我們先來看下File的構(gòu)造方法。
二、構(gòu)造方法
File既可以表示文件,也可以表示目錄,它的主要構(gòu)造方法有:
File中的路徑可以是已經(jīng)存在的,也可以是不存在的。通過new新建一個(gè)File對(duì)象,不會(huì)實(shí)際創(chuàng)建一個(gè)文件,只是創(chuàng)建一個(gè)表示文件或目錄的對(duì)象,new之后,F(xiàn)ile對(duì)象中的路徑是不可變的。
三、文件元數(shù)據(jù)
文件元數(shù)據(jù)主要包括文件名和路徑、文件基本信息以及一些安全和 權(quán)限相關(guān)的信息。文件名和路徑相關(guān)的主要方法有:
這些方法比較直觀,我們就不解釋了。File類中有4個(gè)靜態(tài)變量,表示路徑分隔符,它們是:
separator和separatorChar表示文件路徑分隔符,在Windows系統(tǒng)中, 一般為'',Linux系統(tǒng)中一般為'/'。pathSeparator和pathSeparatorChar表示 多個(gè)文件路徑中的分隔符,比如,環(huán)境變量PATH中的分隔符,Java類 路徑變量classpath中的分隔符,在執(zhí)行命令時(shí),操作系統(tǒng)會(huì)從PATH指 定的目錄中尋找命令,Java運(yùn)行時(shí)加載class文件時(shí),會(huì)從classpath指定 的路徑中尋找類文件。在Windows系統(tǒng)中,這個(gè)分隔符一般為';',在 Linux系統(tǒng)中,這個(gè)分隔符一般為':'。
除了文件名和路徑,F(xiàn)ile對(duì)象還有如下方法,以獲取文件或目錄的 基本信息:
需要說明的是,F(xiàn)ile對(duì)象沒有返回創(chuàng)建時(shí)間的方法,因?yàn)閯?chuàng)建時(shí)間 不是一個(gè)公共概念,Linux/Unix就沒有創(chuàng)建時(shí)間的概念。
File類中與安全和權(quán)限相關(guān)的主要方法有:
在修改方法中,如果修改成功,返回true,否則返回false。在設(shè)置 權(quán)限方法中,owner-Only為true表示只針對(duì)owner,為false表示針對(duì)所有 用戶,沒有指定ownerOnly的方法中,ownerOnly相當(dāng)于是true。
四、文件操作
文件操作主要有創(chuàng)建、刪除、重命名。
新建一個(gè)File對(duì)象不會(huì)實(shí)際創(chuàng)建文件,但如下方法可以:
創(chuàng)建成功返回true,否則返回false,新創(chuàng)建的文件內(nèi)容為空。如果文件已存在,不會(huì)創(chuàng)建。
File對(duì)象還有兩個(gè)靜態(tài)方法,可以創(chuàng)建臨時(shí)文件:
臨時(shí)文件的完整路徑名是系統(tǒng)指定的、唯一的,但可以通過參數(shù)指 定前綴(prefix)、后綴(suffix)和目錄(directory)。prefix是必需 的,且至少要三個(gè)字符;suffix如果為null,則默認(rèn)為.tmp;directory如 果不指定或指定為null,則使用系統(tǒng)默認(rèn)目錄。
File類的刪除方法為:
delete刪除文件或目錄,刪除成功返回true,否則返回false。如果File是目錄且不為空,則delete不會(huì)成功,返回false,換句話說,要?jiǎng)h除目錄,先要?jiǎng)h除目錄下的所有子目錄和文件。deleteOnExit將File對(duì)象加入到待刪列表,在Java虛擬機(jī)正常退出的時(shí)候進(jìn)行實(shí)際刪除。
File類的重命名方法為:
參數(shù)dest代表重命名后的文件,重命名能否成功與系統(tǒng)有關(guān),返回 值代表是否成功。
五、目錄操作
當(dāng)File對(duì)象代表目錄時(shí),可以執(zhí)行目錄相關(guān)的操作,如創(chuàng)建、遍歷。
有兩個(gè)方法用于創(chuàng)建目錄:
它們都是創(chuàng)建目錄,創(chuàng)建成功返回true,失敗返回false。需要注意的是,如果目錄已存在,返回值是false。這兩個(gè)方法的區(qū)別在于:如果 某一個(gè)中間父目錄不存在,則mkdir會(huì)失敗,返回false,而mkdirs則會(huì)創(chuàng)建必需的中間父目錄。
有如下方法訪問一個(gè)目錄下的子目錄和文件:
它們返回的都是直接子目錄或文件,不會(huì)返回子目錄下的文件。 list返回的是文件名數(shù)組,而listFiles返回的是File對(duì)象數(shù)組。FilenameFilter和FileFilter都是接口,用于過濾,F(xiàn)ileFilter的定義為:
FilenameFilter的定義為:
在遍歷子目錄和文件時(shí),針對(duì)每個(gè)文件,會(huì)調(diào)用FilenameFilter或 FileFilter的accept方法,只有accept方法返回true時(shí),才將該子目錄或文件包含到返回結(jié)果中。Filename-Filter和FileFilter的區(qū)別在于:FileFilter 的accept方法參數(shù)只有一個(gè)File對(duì)象,而File-nameFilter的accept方法參數(shù) 有兩個(gè),dir表示父目錄,name表示子目錄或文件名。我們來看個(gè)例 子,列出當(dāng)前目錄下的所有擴(kuò)展名為.txt的文件,代碼可以為:
我們創(chuàng)建了個(gè)FilenameFilter的匿名內(nèi)部類對(duì)象并傳遞給了listFiles。
使用遍歷方法,可以方便地進(jìn)行遞歸遍歷,完成一些更為高級(jí)的功能。比如,計(jì)算一個(gè)目錄下的所有文件的大?。òㄗ幽夸洠?,代碼可以為:
再如,在一個(gè)目錄下,查找所有給定文件名的文件,代碼可以為:
前面介紹了File類的delete方法,我們提到,如果要?jiǎng)h除目錄而目錄不為空,需要先清空目錄,利用遍歷方法,我們可以寫一個(gè)刪除非空目錄的方法,代碼可以為:
六、總結(jié)
關(guān)于文件處理的基本技術(shù),包括文件的基本概念、二進(jìn)制文件與字 節(jié)流、文本文件與字符流,以及文件和目錄操作,至此,我們就介紹完 了。下一章,我們來看文件處理相關(guān)的一些高級(jí)技術(shù)。
到此這篇關(guān)于Java基礎(chǔ)之文件和目錄操作的文章就介紹到這了,更多相關(guān)Java文件和目錄操作內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
IntelliJ?IDEA?2021.3?正式發(fā)布之支持遠(yuǎn)程開發(fā)、IDE故障排查等多項(xiàng)優(yōu)化改進(jìn)
IntelliJ?IDEA?2021.3?正式發(fā)布:支持遠(yuǎn)程開發(fā)、IDE故障排查等多項(xiàng)優(yōu)化改進(jìn)問題,在這個(gè)版本中的遠(yuǎn)程開發(fā)還不是一個(gè)正式版本,而是BETA版,但通過這個(gè)BETA版本,也可以體驗(yàn)IDEA“遠(yuǎn)程開發(fā)”給我們帶來的全新體驗(yàn)2021-12-12Spring?Data?JPA框架快速入門之自定義Repository接口
Spring?Data?JPA是Spring基于JPA規(guī)范的基礎(chǔ)上封裝的?套?JPA?應(yīng)?框架,可使開發(fā)者?極簡(jiǎn)的代碼即可實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的訪問和操作,本篇我們來了解Spring?Data?JPA框架的自定義Repository接口2022-04-04詳談Spring是否支持對(duì)靜態(tài)方法進(jìn)行Aop增強(qiáng)
這篇文章主要介紹了Spring是否支持對(duì)靜態(tài)方法進(jìn)行Aop增強(qiáng),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12Java并發(fā)編程數(shù)據(jù)庫(kù)與緩存數(shù)據(jù)一致性方案解析
這篇文章主要為大家介紹了Java并發(fā)編程中數(shù)據(jù)庫(kù)與緩存數(shù)據(jù)一致性解決方案,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2022-04-04