IO流-File類詳解

1.1File類概述和構(gòu)造方法

  • File類介紹

    • 它是文件和目錄路徑名的抽象表示
    • 文件和目錄是可以通過File封裝成對象的
    • 對于File而言,其封裝的并不是一個真正存在的文件,僅僅是一個路徑名而已.它可以是存在的,也可以是不存在的.將來可以通過具體的操作把這個路徑的內(nèi)容轉(zhuǎn)換為具體存在的慎皱。
  • File類的構(gòu)造方法

    方法名 說明
    File(String pathname) 通過將給定的路徑名字符串轉(zhuǎn)換為抽象路徑名來創(chuàng)建新的 File實例
    File(String parent, String child) 從父路徑名字符串和子路徑名字符串創(chuàng)建新的 File實例
    File(File parent, String child) 從父抽象路徑名和子路徑名字符串創(chuàng)建新的 File實例
  • 示例代碼

    public class FileDemo01 {
        public static void main(String[] args) {
            //File(String pathname): 通過將給定的路徑名字符串轉(zhuǎn)換為抽象路徑名來創(chuàng)建新的 File實例
            File f1 = new File("E:\\itcast\\java.txt");
            System.out.println(f1);
    
            //File(String parent, String child): 從父路徑名字符串和子路徑名字符串創(chuàng)建新的 File實例
            File f2 = new File("E:\\itcast","java.txt");
            System.out.println(f2);
    
            //File(File parent, String child): 從父抽象路徑名和子路徑名字符串創(chuàng)建新的 File實例
            File f3 = new File("E:\\itcast");
            File f4 = new File(f3,"java.txt");
            System.out.println(f4);
        }
    }
    

1.2絕對路徑和相對路徑

  • 絕對路徑

    是一個完整的路徑,從盤符開始

  • 相對路徑

    是一個簡化的路徑,相對當(dāng)前項目下的路徑

  • 示例代碼

    public class FileDemo02 {
        public static void main(String[] args) {
            // 是一個完整的路徑,從盤符開始
            File file1 = new File("D:\\itheima\\a.txt");
    
            // 是一個簡化的路徑,從當(dāng)前項目根目錄開始
            File file2 = new File("a.txt");
            File file3 = new File("模塊名\\a.txt");
        }
    }
    

1.3File類創(chuàng)建功能

  • 方法分類

    方法名 說明
    public boolean createNewFile() 當(dāng)具有該名稱的文件不存在時泊窘,創(chuàng)建一個由該抽象路徑名命名的新空文件
    public boolean mkdir() 創(chuàng)建由此抽象路徑名命名的目錄
    public boolean mkdirs() 創(chuàng)建由此抽象路徑名命名的目錄豪嗽,包括任何必需但不存在的父目錄
  • 示例代碼

    public class FileDemo02 {
        public static void main(String[] args) throws IOException {
            //需求1:我要在E:\\itcast目錄下創(chuàng)建一個文件java.txt
            File f1 = new File("E:\\itcast\\java.txt");
            System.out.println(f1.createNewFile());
            System.out.println("--------");
    
            //需求2:我要在E:\\itcast目錄下創(chuàng)建一個目錄JavaSE
            File f2 = new File("E:\\itcast\\JavaSE");
            System.out.println(f2.mkdir());
            System.out.println("--------");
    
            //需求3:我要在E:\\itcast目錄下創(chuàng)建一個多級目錄JavaWEB\\HTML
            File f3 = new File("E:\\itcast\\JavaWEB\\HTML");
    //        System.out.println(f3.mkdir());
            System.out.println(f3.mkdirs());
            System.out.println("--------");
    
            //需求4:我要在E:\\itcast目錄下創(chuàng)建一個文件javase.txt
            File f4 = new File("E:\\itcast\\javase.txt");
    //        System.out.println(f4.mkdir());
            System.out.println(f4.createNewFile());
        }
    }
    

1.4File類刪除功能

  • 方法分類

    方法名 說明
    public boolean delete() 刪除由此抽象路徑名表示的文件或目錄
  • 示例代碼

    public class FileDemo03 {
        public static void main(String[] args) throws IOException {
    //        File f1 = new File("E:\\itcast\\java.txt");
            //需求1:在當(dāng)前模塊目錄下創(chuàng)建java.txt文件
            File f1 = new File("myFile\\java.txt");
    //        System.out.println(f1.createNewFile());
    
            //需求2:刪除當(dāng)前模塊目錄下的java.txt文件
            System.out.println(f1.delete());
            System.out.println("--------");
    
            //需求3:在當(dāng)前模塊目錄下創(chuàng)建itcast目錄
            File f2 = new File("myFile\\itcast");
    //        System.out.println(f2.mkdir());
    
            //需求4:刪除當(dāng)前模塊目錄下的itcast目錄
            System.out.println(f2.delete());
            System.out.println("--------");
    
            //需求5:在當(dāng)前模塊下創(chuàng)建一個目錄itcast,然后在該目錄下創(chuàng)建一個文件java.txt
            File f3 = new File("myFile\\itcast");
    //        System.out.println(f3.mkdir());
            File f4 = new File("myFile\\itcast\\java.txt");
    //        System.out.println(f4.createNewFile());
    
            //需求6:刪除當(dāng)前模塊下的目錄itcast
            System.out.println(f4.delete());
            System.out.println(f3.delete());
        }
    }
    

1.5File類判斷和獲取功能

  • 判斷功能

    方法名 說明
    public boolean isDirectory() 測試此抽象路徑名表示的File是否為目錄
    public boolean isFile() 測試此抽象路徑名表示的File是否為文件
    public boolean exists() 測試此抽象路徑名表示的File是否存在
  • 獲取功能

    方法名 說明
    public String getAbsolutePath() 返回此抽象路徑名的絕對路徑名字符串
    public String getPath() 將此抽象路徑名轉(zhuǎn)換為路徑名字符串
    public String getName() 返回由此抽象路徑名表示的文件或目錄的名稱
    public File[] listFiles() 返回此抽象路徑名表示的目錄中的文件和目錄的File對象數(shù)組
  • 示例代碼

    public class FileDemo04 {
        public static void main(String[] args) {
            //創(chuàng)建一個File對象
            File f = new File("myFile\\java.txt");
    
    //        public boolean isDirectory():測試此抽象路徑名表示的File是否為目錄
    //        public boolean isFile():測試此抽象路徑名表示的File是否為文件
    //        public boolean exists():測試此抽象路徑名表示的File是否存在
            System.out.println(f.isDirectory());
            System.out.println(f.isFile());
            System.out.println(f.exists());
    
    //        public String getAbsolutePath():返回此抽象路徑名的絕對路徑名字符串
    //        public String getPath():將此抽象路徑名轉(zhuǎn)換為路徑名字符串
    //        public String getName():返回由此抽象路徑名表示的文件或目錄的名稱
            System.out.println(f.getAbsolutePath());
            System.out.println(f.getPath());
            System.out.println(f.getName());
            System.out.println("--------");
    
    //        public File[] listFiles():返回此抽象路徑名表示的目錄中的文件和目錄的File對象數(shù)組
            File f2 = new File("E:\\itcast");
            File[] fileArray = f2.listFiles();
            for(File file : fileArray) {
    //            System.out.println(file);
    //            System.out.println(file.getName());
                if(file.isFile()) {
                    System.out.println(file.getName());
                }
            }
        }
    }
    

1.6File類練習(xí)一

  • 案例需求

    在當(dāng)前模塊下的aaa文件夾中創(chuàng)建一個a.txt文件

  • 實現(xiàn)步驟

    • 創(chuàng)建File對象,指向aaa文件夾
    • 判斷aaa文件夾是否存在,如果不存在則創(chuàng)建
    • 創(chuàng)建File對象,指向aaa文件夾下的a.txt文件
    • 創(chuàng)建這個文件
  • 代碼實現(xiàn)

    public class Test1 {
        public static void main(String[] args) throws IOException {
            //練習(xí)一:在當(dāng)前模塊下的aaa文件夾中創(chuàng)建一個a.txt文件
           /* File file = new File("filemodule\\aaa\\a.txt");
            file.createNewFile();*/
            //注意點:文件所在的文件夾必須要存在.
    
              //1.創(chuàng)建File對象,指向aaa文件夾
            File file = new File("filemodule\\aaa");
              //2.判斷aaa文件夾是否存在,如果不存在則創(chuàng)建
            if(!file.exists()){
                //如果文件夾不存在,就創(chuàng)建出來
                file.mkdirs();
            }
              //3.創(chuàng)建File對象,指向aaa文件夾下的a.txt文件
            File newFile = new File(file,"a.txt");
              //4.創(chuàng)建這個文件
            newFile.createNewFile();
        }
    }
    

1.7File類練習(xí)二

  • 案例需求

    刪除一個多級文件夾

  • 實現(xiàn)步驟

    • 定義一個方法,接收一個File對象
    • 遍歷這個File對象,獲取它下邊的每個文件和文件夾對象
    • 判斷當(dāng)前遍歷到的File對象是文件還是文件夾
    • 如果是文件,直接刪除
    • 如果是文件夾,遞歸調(diào)用自己,將當(dāng)前遍歷到的File對象當(dāng)做參數(shù)傳遞
    • 參數(shù)傳遞過來的文件夾File對象已經(jīng)處理完成,最后直接刪除這個空文件夾
  • 代碼實現(xiàn)

    public class Test2 {
        public static void main(String[] args) {
            //練習(xí)二:刪除一個多級文件夾
            //delete方法
            //只能刪除文件和空文件夾.
            //如果現(xiàn)在要刪除一個有內(nèi)容的文件夾?
            //先刪掉這個文件夾里面所有的內(nèi)容.
            //最后再刪除這個文件夾
    
            File src = new File("C:\\Users\\apple\\Desktop\\src");
            deleteDir(src);
        }
      
      //1.定義一個方法,接收一個File對象
        private static void deleteDir(File src) {
            //先刪掉這個文件夾里面所有的內(nèi)容.
            //遞歸 方法在方法體中自己調(diào)用自己.
            //注意: 可以解決所有文件夾和遞歸相結(jié)合的題目
            //2.遍歷這個File對象,獲取它下邊的每個文件和文件夾對象
            File[] files = src.listFiles();
            //3.判斷當(dāng)前遍歷到的File對象是文件還是文件夾
            for (File file : files) {
                //4.如果是文件,直接刪除
                if(file.isFile()){
                    file.delete();
                }else{
                    //5.如果是文件夾,遞歸調(diào)用自己,將當(dāng)前遍歷到的File對象當(dāng)做參數(shù)傳遞
                    deleteDir(file);//參數(shù)一定要是src文件夾里面的文件夾File對象
                }
            }
            //6.參數(shù)傳遞過來的文件夾File對象已經(jīng)處理完成,最后直接刪除這個空文件夾
            src.delete();
        }
    
    }
    

1.8File類練習(xí)三

  • 案例需求

    統(tǒng)計一個文件夾中每種文件的個數(shù)并打印

    打印格式如下:

              txt:3個
      
              doc:4個
      
              jpg:6個
      
               …
    
  • 實現(xiàn)步驟

    • 定義一個方法,參數(shù)是HashMap集合用來統(tǒng)計次數(shù)和File對象要統(tǒng)計的文件夾
    • 遍歷File對象,獲取它下邊的每一個文件和文件夾對象
    • 判斷當(dāng)前File對象是文件還是文件夾
    • 如果是文件,判斷這種類型文件后綴名在HashMap集合中是否出現(xiàn)過
      • 沒出現(xiàn)過,將這種類型文件的后綴名存入集合中,次數(shù)存1
      • 出現(xiàn)過,獲取這種類型文件的后綴名出現(xiàn)的次數(shù),對其+1,在存回集合中
    • 如果是文件夾,遞歸調(diào)用自己,HashMap集合就是參數(shù)集合,File對象是當(dāng)前文件夾對象
  • 代碼實現(xiàn)

    public class Test3 {
        public static void main(String[] args) {
            //統(tǒng)計一個文件夾中,每種文件出現(xiàn)的次數(shù).
            //統(tǒng)計 --- 定義一個變量用來統(tǒng)計. ---- 弊端:同時只能統(tǒng)計一種文件
            //利用map集合進(jìn)行數(shù)據(jù)統(tǒng)計,鍵 --- 文件后綴名  值 ----  次數(shù)
    
            File file = new File("filemodule");
            HashMap<String, Integer> hm = new HashMap<>();
            getCount(hm, file);
            System.out.println(hm);
        }
      
      //1.定義一個方法,參數(shù)是HashMap集合用來統(tǒng)計次數(shù)和File對象要統(tǒng)計的文件夾
        private static void getCount(HashMap<String, Integer> hm, File file) {
              //2.遍歷File對象,獲取它下邊的每一個文件和文件夾對象
            File[] files = file.listFiles();
            for (File f : files) {
                  //3.判斷當(dāng)前File對象是文件還是文件夾
                if(f.isFile()){
                      //如果是文件,判斷這種類型文件后綴名在HashMap集合中是否出現(xiàn)過
                    String fileName = f.getName();
                    String[] fileNameArr = fileName.split("\\.");
                    if(fileNameArr.length == 2){
                        String fileEndName = fileNameArr[1];
                        if(hm.containsKey(fileEndName)){
                            //出現(xiàn)過,獲取這種類型文件的后綴名出現(xiàn)的次數(shù),對其+1,在存回集合中
                            Integer count = hm.get(fileEndName);
                            //這種文件又出現(xiàn)了一次.
                            count++;
                            //把已經(jīng)出現(xiàn)的次數(shù)給覆蓋掉.
                            hm.put(fileEndName,count);
                        }else{
                            // 沒出現(xiàn)過,將這種類型文件的后綴名存入集合中,次數(shù)存1
                            hm.put(fileEndName,1);
                        }
                    }
                }else{
                  //如果是文件夾,遞歸調(diào)用自己,HashMap集合就是參數(shù)集合,File對象是當(dāng)前文件夾對象代碼實現(xiàn)
                    getCount(hm,f);
                }
            }
        }
      
    }
    

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市料扰,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌焙蹭,老刑警劉巖晒杈,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異孔厉,居然都是意外死亡拯钻,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進(jìn)店門撰豺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來粪般,“玉大人,你說我怎么就攤上這事污桦∧洞酰” “怎么了?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵凡橱,是天一觀的道長小作。 經(jīng)常有香客問我,道長稼钩,這世上最難降的妖魔是什么顾稀? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮坝撑,結(jié)果婚禮上础拨,老公的妹妹穿的比我還像新娘。我一直安慰自己绍载,他們只是感情好诡宗,可當(dāng)我...
    茶點故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著击儡,像睡著了一般塔沃。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上阳谍,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天蛀柴,我揣著相機(jī)與錄音螃概,去河邊找鬼。 笑死鸽疾,一個胖子當(dāng)著我的面吹牛吊洼,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播制肮,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼冒窍,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了豺鼻?” 一聲冷哼從身側(cè)響起综液,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎儒飒,沒想到半個月后谬莹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡桩了,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年附帽,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片井誉。...
    茶點故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡士葫,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出送悔,到底是詐尸還是另有隱情慢显,我是刑警寧澤,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布欠啤,位于F島的核電站荚藻,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏洁段。R本人自食惡果不足惜应狱,卻給世界環(huán)境...
    茶點故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望祠丝。 院中可真熱鬧疾呻,春花似錦、人聲如沸写半。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽叠蝇。三九已至璃岳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背铃慷。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工单芜, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人犁柜。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓洲鸠,卻偏偏與公主長得像,于是被迫代替她去往敵國和親馋缅。 傳聞我的和親對象是個殘疾皇子扒腕,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,614評論 2 353

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

  • 一袜匿、概述 IO流是用來傳輸數(shù)據(jù)的更啄,如文件的讀寫稚疹,有字節(jié)流和字符流之分,字節(jié)流可以處理任何文件數(shù)據(jù)祭务,字符流只能處理純...
    叢鵬閱讀 270評論 0 0
  • 說明:參考代碼部分的時候内狗,請忽略異常處理語句。I/O中異常的有效處理辦法請看【I/O異常處理】章節(jié) /* * I/...
    Michael_林閱讀 774評論 0 1
  • 1.File類 1.1File類概述和構(gòu)造方法【應(yīng)用】 File類介紹它是文件和目錄路徑名的抽象表示文件和目錄是可...
    眼若繁星丶閱讀 234評論 0 1
  • 1.IO流案例 1.1集合到文件數(shù)據(jù)排序改進(jìn)版【應(yīng)用】 1.1.1案例需求 鍵盤錄入5個學(xué)生信息(姓名,語文成績,...
    眼若繁星丶閱讀 210評論 0 1
  • File:Java.lang包下义锥,文件和目錄路徑名的抽象表示形式 File類的實例不可改變柳沙,即可創(chuàng)建實例 構(gòu)造方法...
    卓昂芭比閱讀 311評論 0 0