42.File類

一、File類概述

包位置:java.io.File:

File類是文件和目錄路徑名的抽象表示童漩,主要用于文件和目錄的創(chuàng)建弄贿、刪除、獲取矫膨、判斷差凹、遍歷、獲取大胁嘞凇危尿;File類是一個(gè)與操作系統(tǒng)無關(guān)的一個(gè)類

1.File類操作系統(tǒng)相關(guān)分割符靜態(tài)成員變量:(省略static)

  • String pathSeparator : 操作系統(tǒng)相關(guān)路徑分隔符,字符串表示【windows:分號(hào); linux:冒號(hào):
  • char pathSeparatorChar: 操作系統(tǒng)有關(guān)的路徑分隔符馁痴,字符表示
  • String separator :與系統(tǒng)有關(guān)的默認(rèn)分隔符谊娇,字符串表示÷拊危【文件名稱分隔符 windows:反斜杠\ linux:正斜杠/
  • char separatorChar: 系統(tǒng)相關(guān)的默認(rèn)名稱分隔符,字符表示
/*
操作路徑:路徑不能寫死了
C:\develop\a\a.txt  windows
C:/develop/a/a.txt  linux
"C:"+File.separator+"develop"+File.separator+"a"+File.separator+"a.txt"
 */

System.out.println(File.pathSeparator);//路徑分隔符 windows:分號(hào);  linux:冒號(hào):
System.out.println(File.separator);// 文件名稱分隔符 windows:反斜杠\  linux:正斜杠/

2.絕對(duì)路徑與相對(duì)路徑

  • 絕對(duì)路徑:從盤符開始的路徑济欢,這是一個(gè)完整的路徑。
  • 相對(duì)路徑:相對(duì)于項(xiàng)目目錄的根路徑小渊,這是一個(gè)便捷的路徑法褥,開發(fā)中經(jīng)常使用。(C:\\Users\itcast\\IdeaProjects\\shungyuan\\123.txt-->簡(jiǎn)化為: 123.txt(可以省略項(xiàng)目的根目錄))

注意:

  1. windows操作系統(tǒng)中路徑是不區(qū)分大小寫
  2. 路徑中的文件名稱分隔符windows使用反斜杠,反斜杠是轉(zhuǎn)義字符,兩個(gè)反斜杠代表一個(gè)普通的反斜杠\\

二酬屉、構(gòu)造方法

構(gòu)造方法:(省略public)

  • File(String pathname) : 路徑名字符串 --> 抽象路徑 --> new File 實(shí)例
  • File(String parent, String child): 父路徑名字符串+子路徑名字符串 --> new File 實(shí)例
  • File(File parent, String child) :父抽象路徑名+子路徑名字符串 --> new File 實(shí)例
/** 絕對(duì)路徑與相對(duì)路徑參數(shù):
  String pathname:字符串的路徑名稱
    1.路徑可以是以文件結(jié)尾,也可以是以文件夾結(jié)尾
    2.路徑可以是相對(duì)路徑,也可以是絕對(duì)路徑
    3.路徑可以是存在,也可以是不存在
    4.創(chuàng)建File對(duì)象,只是把字符串路徑封裝為File對(duì)象,不考慮路徑的真假情況*/
/*絕對(duì)路徑*/
String pathname1 = "G:\\picture\\feifei.jpg";
File file1 = new File(pathname1);

/*相對(duì)路徑*/
String parthname2 = ".\\moduleName\\fiefei.jpg";
File file2 = new File(parthname2);
  • 父路徑和子路徑拼接
/**@父路徑和子路徑拼接
好處:
    父路徑和子路徑,可以單獨(dú)書寫,使用起來非常靈活;父路徑和子路徑都可以變化*/
String parent3 = "G:\\picture";
String child3 = "feifei.jpg";
File file3 = new File(parent3, child3);
  • 父級(jí)File對(duì)象(文件夾路徑) + 總路徑字符串
/** @父級(jí)File對(duì)象(文件夾路徑) + 總路徑字符串
好處:
   1.父路徑和子路徑,可以單獨(dú)書寫,使用起來非常靈活;父路徑和子路徑都可以變化
   2.父路徑是File類型,可以使用File的方法對(duì)路徑進(jìn)行一些操作,再使用路徑創(chuàng)建對(duì)象*/
File parentDir4 = new File("G:\\picture");
String child4 = "feifei.jpg";
File file4 = new File(parentDir4, child4);

1.一個(gè)File對(duì)象代表硬盤中實(shí)際村子的一個(gè)文件或者目錄
2.無論該路徑下時(shí)候存在文件或者目錄半等,都不影響File對(duì)象的創(chuàng)建。

三、常用功能

1.一般功能(省略public)

  • String getAbsolutePath() : 返回此File的絕對(duì)路徑名 字符串酱鸭。
    • 返回盤符文件后綴名或者末文夾件名之間的字符串
  • String getPath() : 返回此File轉(zhuǎn)換為路徑名的字符串
    • 返回構(gòu)造路徑new File對(duì)象時(shí)傳入的參數(shù)形式(相對(duì)或者絕對(duì))
    • toString方法調(diào)用的就是getPath方法
  • String getName() :返回由此File表示的文件或者目錄的名稱垛吗。
    • 獲取的就是構(gòu)造方法傳遞路徑結(jié)尾部分(文件/文件夾)
  • String long length() :返回由此File表示的文件的長(zhǎng)度凹髓。
    1. 獲取的是構(gòu)造方法指定的文件的大小,以字節(jié)為單位
    2. 文件夾是沒有大小概念的,不能獲取文件夾的大小
    3. 如果構(gòu)造方法中給出的路徑不存在,那么length方法返回0
  • String getParent():得到父路徑!

2.判斷功能的方法(省略public)

  • boolean exists() : 返回此File表示的文件或者目錄是否實(shí)際存在
  • boolean isDirectory(): 判斷此File表示的是否為目錄(文件夾結(jié)尾)
  • boolean isFile() : 判斷此File是否為文件(文件結(jié)尾)怯屉。

    1.電腦的硬盤中只有文件/文件夾,兩個(gè)方法是互斥
    2.這兩個(gè)方法使用前提,路徑必須是存在的,否則都返回false

3.創(chuàng)建刪除功能方法(省略public)

  • boolean createNewFile: 當(dāng)且僅當(dāng)該名稱的文件尚不存在時(shí)蔚舀,創(chuàng)建一個(gè)新的空文件(構(gòu)造方法的參數(shù))【創(chuàng)建文件的路徑必須存在】。(操作文件夾無效)

    • 返回值:布爾值
      true:文件不存在,創(chuàng)建文件,返回true
      false:文件存在,不會(huì)創(chuàng)建,返回false

    • 注意:創(chuàng)建文件的路徑必須存在,否則會(huì)拋出異常锨络,而且必須處理IOException異常

    public boolean createNewFile() throws IOException
    createNewFile聲明拋出了IOException,我們調(diào)用這個(gè)方法,就必須的處理這個(gè)異常,要么throws,要么trycatch

  • boolean delete() : 刪除由此File表示的文件或者目錄

    • 如果此File表示目錄赌躺,則目錄必須為空才能刪除。
      - >刪除構(gòu)造方法路徑中給出的文件/文件夾【末尾文件或者末尾文件夾
      - >布爾值
      true:文件/文件夾刪除成功
      false:文件夾中有內(nèi)容,不會(huì)刪除
      構(gòu)造方法中路徑不存在
      - >注意:delete方法是直接在硬盤刪除文件/文件夾,不走回收站,刪除要謹(jǐn)慎

  • boolean mkdir() : 創(chuàng)建由此File表示的目錄羡儿。(操作文件無效)

  • boolean mkdirs() :【推薦使用】創(chuàng)建由此File表示的目錄礼患,包括任何必須但是不存在的父目錄。

    • 返回值:布爾值
      true:文件夾不存在,創(chuàng)建文件夾
      false:文件夾存在,不會(huì)創(chuàng)建;
      構(gòu)造方法中給出的路徑不存在
      - >注意:此方法只能創(chuàng)建出文件夾,不能創(chuàng)建文件

4.目錄(目錄對(duì)象)的遍歷(省略public)

  • String[] list() : 返回String數(shù)組掠归,該File目錄下的所有子文件或目錄缅叠。
  • File[] listFiles() : 返回一個(gè)File數(shù)組,該File目錄下的所有的子文件或目錄
    • 調(diào)用listFiles方法的File對(duì)象虏冻,表示的必須是實(shí)際存在的目錄肤粱,否則返回null,無法進(jìn)行遍歷厨相。
      - >注意:
      1.如果構(gòu)造方法中給出的目錄的路徑不存在,會(huì)拋出空指針異常
      2.如果構(gòu)造方法中給出的路徑不是一個(gè)目錄,也會(huì)拋出空指針異常

返回相關(guān)目錄下文件夾或文件的數(shù)組

File file = new File("day_08");
String[] fileSon = file.list();
System.out.println(Arrays.toString(fileSon));
// [day_08.iml, feifei.jpg, src]

5.文件過濾器優(yōu)化【有文件夾則遞歸尋找】【配合使用->dir.listFiles(lambda)

  • java.io.FileFilter是一個(gè)File過濾器领曼。該接口的對(duì)象可以傳遞給File類的listFiles(FileFilter)作為參數(shù),接口中只有一個(gè)方法
    • boolean accept(File pathname) :測(cè)試pathname是包含在當(dāng)前File目錄中蛮穿,符合則返回true
// 創(chuàng)建一個(gè)dir文件
File dir = new File(".\\day_08");

// 使用匿名函數(shù)的方式
File[] array = dir.listFiles(new FileFilter() {
    @Override
    public boolean accept(File pathname) {
        return pathname.isDirectory() || pathname.getName().endsWith(".java");
    }
});

// 使用lambda的方式
File[] array2 = dir.listFiles(
        pathname -> pathname.isDirectory()
                || pathname.getName().endsWith(".java"));

6.文件過濾器優(yōu)化【非遞歸尋找】【配合使用->dir.listFiles(lambda)

  • java.io.FilenameFilter接口:實(shí)現(xiàn)此接口的類實(shí)例可用于過濾器文件名庶骄。
  • boolean accept(File dir, String name) 測(cè)試指定文件是否應(yīng)該包含在某一文件列表中。
    • File dir:構(gòu)造方法中傳遞的被遍歷的目錄【文件所在目錄文件践磅,不含末尾文件/文件名】
    • String name:使用ListFiles方法遍歷目錄,獲取的每一個(gè)文件/文件夾的名稱
File[] array = new File(".\\learnSelf").listFiles(new FilenameFilter() {
    @Override
    public boolean accept(File dir, String name) {
        System.out.println(dir); //  .\\learnSelf
        return name.toLowerCase().endsWith("java");
    }
});

for (File file : array) {
    System.out.println(file.getName());
}

綜合案例 遞歸訪問一個(gè)文件夾下面所有的文件夾或者文件(有color)

import java.io.File;
import java.io.IOException;

public class Main {

    public static void main(String[] args) throws IOException {
       File file = new File(".");
       System.out.println(file.getName());
       showFile(file, 0, "");
    }

    public static boolean showFile(File file, int depth, String fatherSpace) {
        // 記錄當(dāng)前遞歸是否打印了前置空白,從而顯示得不太寬松
        boolean printed = false;

        // 遞歸打印當(dāng)前文件夾下的文件和文件夾
        File[] filesList = file.listFiles();
        File file1;
        String current = "";
        for (int i = 0; i < filesList.length; i ++) {
            file1 = filesList[i];

            System.out.print(fatherSpace + "   |");

            // 計(jì)算下一個(gè)遞歸需要的前置空白
            if(i == filesList.length - 1) {
                current = fatherSpace + "    ";
            } else {
                current = fatherSpace + "   |";
            }

            if(file1.isDirectory()) {
                // 打印當(dāng)前的文件夾名稱
                System.out.println("\033[34;1m-[D]\033[0m" + "\033[36;2m" + file1.getName() + "\033[0m");

                // 遞歸遍歷此文件夾
                printed = showFile(file1, depth + 1, current);
            } else {
                System.out.println("\033[31;1m-[F]\033[0m" + "\033[35;2m" + file1.getName() + "\033[0m");
            }

            // 當(dāng)前列表結(jié)束打印一個(gè)父級(jí)空白瓢姻,從而顯得不擁擠
            if(i == filesList.length - 1 && !printed) {
                System.out.println(fatherSpace);
                return true;
            }
        }
        return printed;
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市音诈,隨后出現(xiàn)的幾起案子幻碱,更是在濱河造成了極大的恐慌,老刑警劉巖细溅,帶你破解...
    沈念sama閱讀 219,270評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件褥傍,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡喇聊,警方通過查閱死者的電腦和手機(jī)恍风,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人朋贬,你說我怎么就攤上這事凯楔。” “怎么了锦募?”我有些...
    開封第一講書人閱讀 165,630評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵摆屯,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我糠亩,道長(zhǎng)虐骑,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,906評(píng)論 1 295
  • 正文 為了忘掉前任赎线,我火速辦了婚禮廷没,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘垂寥。我一直安慰自己颠黎,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評(píng)論 6 392
  • 文/花漫 我一把揭開白布滞项。 她就那樣靜靜地躺著盏缤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蓖扑。 梳的紋絲不亂的頭發(fā)上唉铜,一...
    開封第一講書人閱讀 51,718評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音律杠,去河邊找鬼潭流。 笑死,一個(gè)胖子當(dāng)著我的面吹牛柜去,可吹牛的內(nèi)容都是我干的灰嫉。 我是一名探鬼主播,決...
    沈念sama閱讀 40,442評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼嗓奢,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼讼撒!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起股耽,我...
    開封第一講書人閱讀 39,345評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤根盒,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后物蝙,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體炎滞,經(jīng)...
    沈念sama閱讀 45,802評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評(píng)論 3 337
  • 正文 我和宋清朗相戀三年诬乞,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了册赛。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片钠导。...
    茶點(diǎn)故事閱讀 40,117評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖森瘪,靈堂內(nèi)的尸體忽然破棺而出牡属,到底是詐尸還是另有隱情,我是刑警寧澤扼睬,帶...
    沈念sama閱讀 35,810評(píng)論 5 346
  • 正文 年R本政府宣布逮栅,位于F島的核電站,受9級(jí)特大地震影響痰驱,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜瞳浦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評(píng)論 3 331
  • 文/蒙蒙 一担映、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧叫潦,春花似錦蝇完、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至傻咖,卻和暖如春朋魔,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背卿操。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工警检, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人害淤。 一個(gè)月前我還...
    沈念sama閱讀 48,377評(píng)論 3 373
  • 正文 我出身青樓扇雕,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親窥摄。 傳聞我的和親對(duì)象是個(gè)殘疾皇子镶奉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 一、基礎(chǔ)知識(shí):1崭放、JVM哨苛、JRE和JDK的區(qū)別:JVM(Java Virtual Machine):java虛擬機(jī)...
    殺小賊閱讀 2,383評(píng)論 0 4
  • 1移国、IO介紹 在前期的學(xué)習(xí)上述知識(shí)點(diǎn)的過程中,我們書寫的任何程序道伟,它運(yùn)行的時(shí)候都會(huì)有數(shù)據(jù)的產(chǎn)生迹缀,比如時(shí)間數(shù)據(jù)使碾,而這...
    Villain丶Cc閱讀 1,446評(píng)論 0 3
  • 當(dāng)初志氣,少年懷文采祝懂,盡是豪邁票摇。守住癡狂風(fēng)雨故螟蒸,一任月明天外左腔。池下乘云,淺溪舟渡粥帚,惟夢(mèng)今猶在灰蛙∷钐蓿堪憐前路,笑誰時(shí)不我...
    銓齋閱讀 272評(píng)論 8 17
  • 勿忘國(guó)恥摩梧!
    安娜的景閱讀 218評(píng)論 0 0
  • 父親的概念對(duì)我而言就像一個(gè)越來越遠(yuǎn)的背影 我已無法形容他是什么樣子 或許他就是立在墻角的那個(gè)老?頭 或許他就是還幸...
    武珍珍閱讀 199評(píng)論 0 0