Java基礎(chǔ):IO流之File類(lèi)

1. File類(lèi)概述

文件和目錄路徑名的抽象表示形式问潭,表示一個(gè)文件或文件夾,并提供了一系列操作文件或文件夾的方法

2. 構(gòu)造方法

方法 功能描述
File(String pathname) 根據(jù)路徑得到File對(duì)象
File(String parent,String child) 根據(jù)目錄和子文件/目錄得到對(duì)象
File(File parent,String child) 根據(jù)父File對(duì)象和子文件/目錄得到對(duì)象

示例代碼

package cn.itcast_01;
import java.io.File;
/*
 * 我們要想實(shí)現(xiàn)IO的操作,就必須知道硬盤(pán)上文件的表現(xiàn)形式昂羡。
 * 而Java就提供了一個(gè)類(lèi)File供我們使用阀参。
 * 
 * File:文件和目錄(文件夾)路徑名的抽象表示形式
 * 構(gòu)造方法:
 *      File(String pathname):根據(jù)一個(gè)路徑得到File對(duì)象
 *      File(String parent, String child):根據(jù)一個(gè)目錄和一個(gè)子文件/目錄得到File對(duì)象
 *      File(File parent, String child):根據(jù)一個(gè)父File對(duì)象和一個(gè)子文件/目錄得到File對(duì)象
 */
public class FileDemo {
    public static void main(String[] args) {
        // File(String pathname):根據(jù)一個(gè)路徑得到File對(duì)象
        // 把e:\\demo\\a.txt封裝成一個(gè)File對(duì)象
        File file = new File("E:\\demo\\a.txt");

        // File(String parent, String child):根據(jù)一個(gè)目錄和一個(gè)子文件/目錄得到File對(duì)象
        File file2 = new File("E:\\demo", "a.txt");

        // File(File parent, String child):根據(jù)一個(gè)父File對(duì)象和一個(gè)子文件/目錄得到File對(duì)象
        File file3 = new File("e:\\demo");
        File file4 = new File(file3, "a.txt");

        // 以上三種方式其實(shí)效果一樣
    }
}

3. 創(chuàng)建功能

返回值 方法 功能描述
boolean createNewFile() 創(chuàng)建文件
boolean mkdir() 創(chuàng)建文件夾
boolean mkdirs() 創(chuàng)建多級(jí)文件夾,如果父級(jí)文件夾不存在瞪讼,會(huì)自動(dòng)創(chuàng)建
File createTempFile() 創(chuàng)建一個(gè)用于緩存的臨時(shí)文件

代碼示例

package cn.itcast_02;
import java.io.File;
import java.io.IOException;
/*
 *創(chuàng)建功能:
 *public boolean createNewFile():創(chuàng)建文件 如果存在這樣的文件钧椰,就不創(chuàng)建了
 *public boolean mkdir():創(chuàng)建文件夾 如果存在這樣的文件夾,就不創(chuàng)建了
 *public boolean mkdirs():創(chuàng)建文件夾,如果父文件夾不存在尝艘,會(huì)幫你創(chuàng)建出來(lái)
 */
public class FileDemo {
    public static void main(String[] args) throws IOException {
        // 需求:我要在e盤(pán)目錄下創(chuàng)建一個(gè)文件夾demo
        File file = new File("e:\\demo");
        System.out.println("mkdir:" + file.mkdir());

        // 需求:我要在e盤(pán)目錄demo下創(chuàng)建一個(gè)文件a.txt
        File file2 = new File("e:\\demo\\a.txt");
        System.out.println("createNewFile:" + file2.createNewFile());

        // 需求:我要在e盤(pán)目錄test下創(chuàng)建一個(gè)文件b.txt
        // Exception in thread "main" java.io.IOException: 系統(tǒng)找不到指定的路徑演侯。
        // 注意:要想在某個(gè)目錄下創(chuàng)建內(nèi)容,該目錄首先必須存在背亥。
        // File file3 = new File("e:\\test\\b.txt");
        // System.out.println("createNewFile:" + file3.createNewFile());

        // 需求:我要在e盤(pán)目錄test下創(chuàng)建aaa目錄
        // File file4 = new File("e:\\test\\aaa");
        // System.out.println("mkdir:" + file4.mkdir());

        // File file5 = new File("e:\\test");
        // File file6 = new File("e:\\test\\aaa");
        // System.out.println("mkdir:" + file5.mkdir());
        // System.out.println("mkdir:" + file6.mkdir());

        // 其實(shí)我們有更簡(jiǎn)單的方法
        File file7 = new File("e:\\aaa\\bbb\\ccc\\ddd");
        System.out.println("mkdirs:" + file7.mkdirs());

        // 看下面的這個(gè)東西:
        File file8 = new File("e:\\liuyi\\a.txt");
        System.out.println("mkdirs:" + file8.mkdirs());
    }
}

4. 刪除功能

返回值 方法 功能描述
boolean delete() 刪除文件或文件夾

代碼示例

package cn.itcast_03;
import java.io.File;
import java.io.IOException;
/*
 * 刪除功能:public boolean delete()
 * 
 * 注意:
 *      A:如果你創(chuàng)建文件或者文件夾忘了寫(xiě)盤(pán)符路徑秒际,那么悬赏,默認(rèn)在項(xiàng)目路徑下。
 *      B:Java中的刪除不走回收站娄徊。
 *      C:要?jiǎng)h除一個(gè)文件夾闽颇,請(qǐng)注意該文件夾內(nèi)不能包含文件或者文件夾
 */
public class FileDemo {
    public static void main(String[] args) throws IOException {
        // 創(chuàng)建文件
        // File file = new File("e:\\a.txt");
        // System.out.println("createNewFile:" + file.createNewFile());

        // 我不小心寫(xiě)成這個(gè)樣子了
        File file = new File("a.txt");
        System.out.println("createNewFile:" + file.createNewFile());

        // 繼續(xù)玩幾個(gè)
        File file2 = new File("aaa\\bbb\\ccc");
        System.out.println("mkdirs:" + file2.mkdirs());

        // 刪除功能:我要?jiǎng)h除a.txt這個(gè)文件
        File file3 = new File("a.txt");
        System.out.println("delete:" + file3.delete());

        // 刪除功能:我要?jiǎng)h除ccc這個(gè)文件夾
        File file4 = new File("aaa\\bbb\\ccc");
        System.out.println("delete:" + file4.delete());

        // 刪除功能:我要?jiǎng)h除aaa文件夾
        // File file5 = new File("aaa");
        // System.out.println("delete:" + file5.delete());

        File file6 = new File("aaa\\bbb");
        File file7 = new File("aaa");
        System.out.println("delete:" + file6.delete());
        System.out.println("delete:" + file7.delete());
    }
}

5. 重命名功能

方法 功能描述
renamneTo(File dest) 路徑名相同就是重命名,不一樣就是改名加剪切

代碼示例

package cn.itcast_04;
import java.io.File;
/*
 * 重命名功能:public boolean renameTo(File dest)
 *      如果路徑名相同寄锐,就是改名兵多。
 *      如果路徑名不同,就是改名并剪切橄仆。
 * 
 * 路徑以盤(pán)符開(kāi)始:絕對(duì)路徑 c:\\a.txt
 * 路徑不以盤(pán)符開(kāi)始:相對(duì)路徑    a.txt
 */
public class FileDemo {
    public static void main(String[] args) {
        // 創(chuàng)建一個(gè)文件對(duì)象
        // File file = new File("林青霞.jpg");
        // // 需求:我要修改這個(gè)文件的名稱(chēng)為"東方不敗.jpg"
        // File newFile = new File("東方不敗.jpg");
        // System.out.println("renameTo:" + file.renameTo(newFile));

        File file2 = new File("東方不敗.jpg");
        File newFile2 = new File("e:\\林青霞.jpg");
        System.out.println("renameTo:" + file2.renameTo(newFile2));
    }
}

6. 判斷功能

方法 功能描述
isDirectory() 判斷是否是目錄
isFile() 判斷是否是文件
exists() 判斷是否是存在
canRead() 判斷是否是可讀
canWrite() 判斷是否是可寫(xiě)
isHidden() 判斷是否是隱藏

示例代碼

import java.io.File;  
  
/* 
 * 判斷功能: 
 * public boolean isDirectory():判斷是否是目錄 
 * public boolean isFile():判斷是否是文件 
 * public boolean exists():判斷是否存在 
 * public boolean canRead():判斷是否可讀 
 * public boolean canWrite():判斷是否可寫(xiě) 
 * public boolean isHidden():判斷是否隱藏 
 */  
public class FileDemo {  
    public static void main(String[] args) {  
        // 創(chuàng)建文件對(duì)象  
        File file = new File("a.txt");  
  
        System.out.println("isDirectory:" + file.isDirectory());// false  
        System.out.println("isFile:" + file.isFile());// true  
        System.out.println("exists:" + file.exists());// true  
        System.out.println("canRead:" + file.canRead());// true  
        System.out.println("canWrite:" + file.canWrite());// true  
        System.out.println("isHidden:" + file.isHidden());// false  
    }  
}

7. 獲取功能

返回值 方法 功能描述
String getAbsolutePath() 獲取絕對(duì)路徑
String getPath() 獲取相對(duì)路徑
String getName() 獲取名稱(chēng)
long getFreeSpace() 獲取剩余可用空間
long getTotalSpace() 獲取總大小
long length() 獲取長(zhǎng)度剩膘,字節(jié)數(shù)
long lastModified() 獲取最后一次修改時(shí)間,毫秒值
String[] list() 獲取指定目錄下的所有文件或文件夾的名稱(chēng)數(shù)組
File[] listFiles() 獲取指定目錄下的所有文件或文件夾的File數(shù)組

代碼示例

package cn.itcast_06;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
/*
 * 獲取功能:
 * public String getAbsolutePath():獲取絕對(duì)路徑
 * public String getPath():獲取相對(duì)路徑
 * public String getName():獲取名稱(chēng)
 * public long length():獲取長(zhǎng)度盆顾。字節(jié)數(shù)
 * public long lastModified():獲取最后一次的修改時(shí)間怠褐,毫秒值
 */
public class FileDemo {
    public static void main(String[] args) {
        // 創(chuàng)建文件對(duì)象
        File file = new File("demo\\test.txt");

        System.out.println("getAbsolutePath:" + file.getAbsolutePath());
        System.out.println("getPath:" + file.getPath());
        System.out.println("getName:" + file.getName());
        System.out.println("length:" + file.length());
        System.out.println("lastModified:" + file.lastModified());

        // 1416471971031
        Date d = new Date(1416471971031L);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String s = sdf.format(d);
        System.out.println(s);
    }
}

運(yùn)行結(jié)果:

file

8. 高級(jí)獲取功能

package cn.itcast_07;
import java.io.File;
/*
 * 高級(jí)獲取功能:
 * public String[] list():獲取指定目錄下的所有文件或者文件夾的名稱(chēng)數(shù)組
 * public File[] listFiles():獲取指定目錄下的所有文件或者文件夾的File數(shù)組
 */
public class FileDemo {
    public static void main(String[] args) {
        // 指定一個(gè)目錄
        File file = new File("e:\\");

        // public String[] list():獲取指定目錄下的所有文件或者文件夾的名稱(chēng)數(shù)組
        String[] strArray = file.list();
        for (String s : strArray) {
            System.out.println(s);
        }
        System.out.println("------------");

        // public File[] listFiles():獲取指定目錄下的所有文件或者文件夾的File數(shù)組
        File[] fileArray = file.listFiles();
        for (File f : fileArray) {
            System.out.println(f.getName());
        }
    }
}

運(yùn)行結(jié)果:

file

9. 文件過(guò)濾器

返回值 方法 功能描述
String[] list(FilenameFilter filter) 返回滿(mǎn)足條件的文件名數(shù)組
File[] listFiles(FilenameFilter filter) 返回滿(mǎn)足條件的文件數(shù)組

10. File練習(xí)

文件名稱(chēng)過(guò)濾器的實(shí)現(xiàn)思想及代碼

  • public String[] list(FilenameFilter filter)
  • public File[] listFiles(FilenameFilter filter)

10.1 文件名稱(chēng)過(guò)濾器的實(shí)現(xiàn)

package cn.itcast_08;
import java.io.File;
import java.io.FilenameFilter;
/*
 * 判斷E盤(pán)目錄下是否有后綴名為.jpg的文件,如果有您宪,就輸出此文件名稱(chēng)
 * A:先獲取所有的奈懒,然后遍歷的時(shí)候,依次判斷宪巨,如果滿(mǎn)足條件就輸出磷杏。
 * B:獲取的時(shí)候就已經(jīng)是滿(mǎn)足條件的了,然后輸出即可捏卓。
 * 
 * 要想實(shí)現(xiàn)這個(gè)效果极祸,就必須學(xué)習(xí)一個(gè)接口:文件名稱(chēng)過(guò)濾器
 * public String[] list(FilenameFilter filter)
 * public File[] listFiles(FilenameFilter filter)
 */
public class FileDemo2 {
    public static void main(String[] args) {
        // 封裝e判斷目錄
        File file = new File("e:\\");

        // 獲取該目錄下所有文件或者文件夾的String數(shù)組
        // public String[] list(FilenameFilter filter)
        String[] strArray = file.list(new FilenameFilter() {
            @Override
            public boolean accept(File dir, String name) {
                // return false;
                // return true;
                // 通過(guò)這個(gè)測(cè)試,我們就知道了天吓,到底把這個(gè)文件或者文件夾的名稱(chēng)加不加到數(shù)組中贿肩,取決于這里的返回值是true還是false
                // 所以,這個(gè)的true或者false應(yīng)該是我們通過(guò)某種判斷得到的
                // System.out.println(dir + "---" + name);
                // File file = new File(dir, name);
                // // System.out.println(file);
                // boolean flag = file.isFile();
                // boolean flag2 = name.endsWith(".jpg");
                // return flag && flag2;
                return new File(dir, name).isFile() && name.endsWith(".jpg");
            }
        });

        // 遍歷
        for (String s : strArray) {
            System.out.println(s);
        }
    }
}

10.2 遞歸遍歷目錄下指定后綴名結(jié)尾的文件名稱(chēng)

package cn.itcast_03;
import java.io.File;
/*
 * 需求:把E:\JavaSE目錄下所有的java結(jié)尾的文件的絕對(duì)路徑給輸出在控制臺(tái)龄寞。
 * 
 * 分析:
 *      A:封裝目錄
 *      B:獲取該目錄下所有的文件或者文件夾的File數(shù)組
 *      C:遍歷該File數(shù)組汰规,得到每一個(gè)File對(duì)象
 *      D:判斷該File對(duì)象是否是文件夾
 *          是:回到B
 *          否:繼續(xù)判斷是否以.java結(jié)尾
 *              是:就輸出該文件的絕對(duì)路徑
 *              否:不搭理它
 */
public class FilePathDemo {
    public static void main(String[] args) {
        // 封裝目錄
        File srcFolder = new File("E:\\JavaSE");

        // 遞歸功能實(shí)現(xiàn)
        getAllJavaFilePaths(srcFolder);
    }

    private static void getAllJavaFilePaths(File srcFolder) {
        // 獲取該目錄下所有的文件或者文件夾的File數(shù)組
        File[] fileArray = srcFolder.listFiles();

        // 遍歷該File數(shù)組,得到每一個(gè)File對(duì)象
        for (File file : fileArray) {
            // 判斷該File對(duì)象是否是文件夾
            if (file.isDirectory()) {
                getAllJavaFilePaths(file);
            } else {
                // 繼續(xù)判斷是否以.java結(jié)尾
                if (file.getName().endsWith(".java")) {
                    // 就輸出該文件的絕對(duì)路徑
                    System.out.println(file.getAbsolutePath());
                }
            }
        }
    }
}

運(yùn)行結(jié)果:

10.3 遞歸刪除帶內(nèi)容的目錄

package cn.itcast_03;
import java.io.File;
/*
 * 需求:遞歸刪除帶內(nèi)容的目錄
 * 
 * 分析:
 *      A:封裝目錄
 *      B:獲取該目錄下的所有文件或者文件夾的File數(shù)組
 *      C:遍歷該File數(shù)組物邑,得到每一個(gè)File對(duì)象
 *      D:判斷該File對(duì)象是否是文件夾
 *          是:回到B
 *          否:就刪除
 */
public class FileDeleteDemo {
    public static void main(String[] args) {
        // 封裝目錄
        File srcFolder = new File("demo");
        // 遞歸實(shí)現(xiàn)
        deleteFolder(srcFolder);
    }

    private static void deleteFolder(File srcFolder) {
        // 獲取該目錄下的所有文件或者文件夾的File數(shù)組
        File[] fileArray = srcFolder.listFiles();

        if (fileArray != null) {
            // 遍歷該File數(shù)組溜哮,得到每一個(gè)File對(duì)象
            for (File file : fileArray) {
                // 判斷該File對(duì)象是否是文件夾
                if (file.isDirectory()) {
                    deleteFolder(file);
                } else {
                    System.out.println(file.getName() + "---" + file.delete());
                }
            }

            System.out.println(srcFolder.getName() + "---" + srcFolder.delete());
        }
    }
}

運(yùn)行結(jié)果:

file
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市色解,隨后出現(xiàn)的幾起案子茂嗓,更是在濱河造成了極大的恐慌,老刑警劉巖科阎,帶你破解...
    沈念sama閱讀 212,332評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件述吸,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)蝌矛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,508評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)道批,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人入撒,你說(shuō)我怎么就攤上這事隆豹。” “怎么了茅逮?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,812評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵璃赡,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我献雅,道長(zhǎng)碉考,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,607評(píng)論 1 284
  • 正文 為了忘掉前任惩琉,我火速辦了婚禮豆励,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘瞒渠。我一直安慰自己,他們只是感情好技扼,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,728評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布伍玖。 她就那樣靜靜地躺著,像睡著了一般剿吻。 火紅的嫁衣襯著肌膚如雪窍箍。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,919評(píng)論 1 290
  • 那天丽旅,我揣著相機(jī)與錄音椰棘,去河邊找鬼。 笑死榄笙,一個(gè)胖子當(dāng)著我的面吹牛邪狞,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播茅撞,決...
    沈念sama閱讀 39,071評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼帆卓,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了米丘?” 一聲冷哼從身側(cè)響起剑令,我...
    開(kāi)封第一講書(shū)人閱讀 37,802評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎拄查,沒(méi)想到半個(gè)月后吁津,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,256評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡堕扶,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,576評(píng)論 2 327
  • 正文 我和宋清朗相戀三年碍脏,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了癣疟。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,712評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡潮酒,死狀恐怖睛挚,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情急黎,我是刑警寧澤扎狱,帶...
    沈念sama閱讀 34,389評(píng)論 4 332
  • 正文 年R本政府宣布,位于F島的核電站勃教,受9級(jí)特大地震影響淤击,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜故源,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,032評(píng)論 3 316
  • 文/蒙蒙 一污抬、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧绳军,春花似錦印机、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,798評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至奶是,卻和暖如春楣责,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背聂沙。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,026評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工秆麸, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人及汉。 一個(gè)月前我還...
    沈念sama閱讀 46,473評(píng)論 2 360
  • 正文 我出身青樓沮趣,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親豁生。 傳聞我的和親對(duì)象是個(gè)殘疾皇子兔毒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,606評(píng)論 2 350

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

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)甸箱,斷路器育叁,智...
    卡卡羅2017閱讀 134,637評(píng)論 18 139
  • 1 IONo18 1.1IO框架 【 IO:Input Output 在程序運(yùn)行的過(guò)程中,可能需要對(duì)一些設(shè)備進(jìn)...
    征程_Journey閱讀 952評(píng)論 0 1
  • ¥開(kāi)啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開(kāi)一個(gè)線程芍殖,因...
    小菜c閱讀 6,373評(píng)論 0 17
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,778評(píng)論 6 342
  • 那道柔和的光打在臉上豪嗽,我的心柔軟一片 你是不是也一樣,站在花海里,聞著香味在想念 但內(nèi)心還是有自己念念不忘的那一朵...
    鳳以非閱讀 395評(píng)論 0 3