還要多久才能成為JAVA大佬葵擎?第十五天

IO

File類:

描述程序當(dāng)中操作的文件和目錄

  • 屬性:
    1.pathSeparator 路徑分隔符 等價(jià)于在字符串書寫的;/:
    2.separator 目錄分隔符 等價(jià)于在字符串當(dāng)中的\效果
  • 備注:
    1.分隔符:如果使用的是\需要使用\\來進(jìn)行目錄區(qū)分如果使用的是/需要使用/來進(jìn)行目錄區(qū)分
    2.對于不同操作系統(tǒng)锅必,路徑分隔符一般不一樣伐脖,Windows系統(tǒng)當(dāng)中使用的是(;)作為分割介粘,Linux系統(tǒng)當(dāng)中使用(:)作為分割
  • 構(gòu)造方法
    1.File(String pathname) 通過將給定的路徑名的字符串轉(zhuǎn)換成一個(gè)抽象路徑名創(chuàng)建一個(gè)新的 File實(shí)例秉犹。
    2.File(File parent, String child) 創(chuàng)建從一個(gè)家長的抽象路徑名和一個(gè)孩子的路徑字符串的新 File實(shí)例蛉谜。
    3.File(String parent, String child) 創(chuàng)建從父路徑名的字符串和一個(gè)孩子的一個(gè)新的 File實(shí)例文件。
  • 路徑:
    相對路徑:相對于當(dāng)前所在的項(xiàng)目路徑
    絕對路徑:以盤符(根目錄)為開頭的路徑
    項(xiàng)目的根路徑:文件直接放到項(xiàng)目目錄下
  • File類的常用API方法
  1. getAbsolutePath() 獲取file對象的絕對路徑
  2. getName() 獲取file對象的文件名稱或者是目錄名稱
  3. getParent() 獲取file文件的父路徑 不包含文件本身的一個(gè)路徑
  4. length() 獲取文件的大小
  5. getPath() 返回值是變化的
  6. boolean isFile() 測試此抽象路徑名表示的文件是否為普通文件崇堵。
  7. exists() 判斷該文件在硬盤當(dāng)中是否存在
  8. boolean isDirectory() 判斷該file實(shí)例是不是一個(gè)目錄
  9. boolean createNewFile() 當(dāng)且僅當(dāng)具有該名稱的文件尚不存在時(shí)型诚,原子地創(chuàng)建一個(gè)由該抽象路徑名命名的新的空文件。
  10. boolean mkdir() 創(chuàng)建由此抽象路徑名命名的目錄鸳劳。
  11. boolean mkdirs() 創(chuàng)建由此抽象路徑名命名的目錄狰贯,包括任何必需但不存在的父目錄。
  12. boolean delete() 刪除由此抽象路徑名表示的文件或目錄
  13. String[] list() 返回一個(gè)字符串?dāng)?shù)組赏廓,命名由此抽象路徑名表示的目錄中的文件和目錄涵紊。
  14. File[] listFiles() 返回一個(gè)抽象路徑名數(shù)組,表示由該抽象路徑名表示的目錄中的文件幔摸。
  15. File[] listFiles(FileFiler filer) 返回一個(gè)抽象路徑名數(shù)組摸柄,表示由此抽象路徑名表示的滿足指定過濾器的目錄中的文件和目錄。
        // 絕對路徑
        String absolutePath = "E:\\class_projects\\JavaSE18\\day19_IO\\src\\com\\zhiyou100\\io\\Demo01_IO.java";
        // 相對路徑
        String relativePath = "src\\com\\zhiyou100\\io\\Demo01_IO.java";
        // aaa.txt文件的相對路徑
        String relativePath2 = "aaa.txt";// 相對路徑
        // 1.使用 File(String pathname) 創(chuàng)建File實(shí)例
        File file = new File(pathname);// 在程序當(dāng)中創(chuàng)建了一個(gè)文件File實(shí)例
        // 想要獲取當(dāng)前文件的名稱 getName()
        System.out.println(file.getName());//helloWorld.txt
        // 在D盤的java目錄中創(chuàng)建一個(gè)文件helloWorld.java
        String pathname2 = "D:\\java\\HelloWorld.java";
        File file2 = new File(pathname2);
        System.out.println(file2.getName());
        File parent = new File("D:\\java");
        String pathParent = "D:\\java";
        String pathChild = "HelloWorld.java";
        // 2.使用 File(String parent, String child)
        File childFile1 = new File(pathParent, pathChild);
        System.out.println("+++++++"+childFile1.getName());
        // 3.使用 File(File parent, String child)
        File childFile2 = new File(parent, pathChild);
        System.out.println("-----"+childFile2.getName());
        // 在D盤的根目錄下創(chuàng)建一個(gè)文件helloWorld.txt
        String pathname4 = "D:\\helloWorld.txt";
        File file4=new File(pathname4);
        boolean newFile = file4.createNewFile();
        System.out.println(newFile);
        // 在D盤的根目錄下創(chuàng)建一個(gè)mysql目錄(文件夾)
        String pathname3 = "D:\\mysql";
        File file3 = new File(pathname3);
        boolean mkdir = file3.mkdir();
        System.out.println(mkdir);
        //訪問D:/桌面/第一次測試.txt
        String pathname1="D:/桌面/第一次測試.txt";
        File file1=new File(pathname1);
        //獲取對象的絕對路徑
        System.out.println(file1.getAbsolutePath());
        //獲取對象的文件名
        System.out.println(file1.getName());
        //獲取對象的父路徑既忆,不包含文件本身
        System.out.println(file1.getParent());
        //獲取對象文件的相對路徑
        System.out.println(file1.getPath());
        //獲取文件大小
        System.out.println(file1.length());
        //判斷在D:/develop/bbb.txt文件是否存在
        String pathname1="D:/develop/bbb.txt";
        File file = new File(pathname1);
        boolean exists = file.exists();
        System.out.println(exists);
        //判斷該文件是否存在
        String pathname2="D:/develop/aaa.txt";
        File file1 = new File(pathname2);
        System.out.println(file1.length());
        System.out.println(file1.exists());
        //判斷該文件是否為一個(gè)普通文件
        System.out.println(file1.isFile());
        //判斷該文件是否為一個(gè)目錄
        System.out.println(file1.isDirectory());
        //在D:\develop創(chuàng)建一個(gè)叫做aaa.txt文件
        String pathname1="D:\\develop\\aaa.txt";
        File file1=new File(pathname1);
        if (!file1.exists()){
            boolean newFile1 = file1.createNewFile();
            System.out.println(newFile1);
        }else {
            System.out.println("已經(jīng)存在");
        }
        //boolean mkdir() 創(chuàng)建由此抽象路徑名命名的目錄
        String pathname3="D:/develop/School";
        File file3 = new File(pathname3);
        if (!file3.exists()) {
            System.out.println(file3.mkdir());
        }else {
            System.out.println("已經(jīng)存在");
        }
        //boolean mkdirs() 創(chuàng)建由此抽象路徑名命名的目錄塘幅,包括任何必需但不存在的父目錄
        String pathname4="D:/develop/zhiyou/School";
        File file4 = new File(pathname4);
        if (!file4.exists()) {
            System.out.println(file4.mkdirs());
        }else {
            System.out.println("已經(jīng)存在");
        }
        //D:/develop/School/新建文本文檔.txt   刪除
        File file=new File("D:\\develop\\School\\新建 文本文檔.txt");
        if (file.exists()){
            System.out.println(file.delete());
            System.out.println("---");
        }
        //遍歷該文件夾內(nèi)所有的子文件夾
        File file1 = new File("D:\\develop");
        File[] files = file1.listFiles();
        for (File s : files) {
            System.out.println(s.getName());
        }
    //遍歷該文件夾內(nèi)所有的子文件夾和文件
    public static void getAll(File file){
        File[] files = file.listFiles();
        for (File f:files){
            if (f.isDirectory()){
                System.out.println(f.getName()+"----");
                getAll(f);
            }else {
                System.out.println(f.getName()+"++++");
            }
        }
    }
    //遍歷該文件夾中指定的文件類型
    public static void m9(File f){
        File[] files = f.listFiles();
        for (File file : files) {
            if (file.isFile()){
                if (file.getName().endsWith(".java")){
                    System.out.println(file.getName());
                }else {
                    m9(file);
                }
            }
        }
    }
    //遞歸
    public static int m8(int n){
        if (n==1){
            return 1;
        }
        return n*m8(n-1);
    }
  • 備注:
    1.getPath()如果程序獲取該文件是通過絕對路徑獲取的,那么該方法的返回值是一個(gè)絕對路徑
    如果程序獲取該文件是通過相對路徑獲取的尿贫,那么該方法的返回值是一個(gè)相對路徑
    2.file類當(dāng)中的方法只能識別project工程類型,不能直接識別module工程
    3.createNewFile()要求創(chuàng)建文件的路徑在硬盤上是真實(shí)存在的踏揣,否則會拋出異常
    4.delete()它可以刪除文件或文件夾,當(dāng)刪除文件夾時(shí),必須保證該文件夾下沒有文件或子文件夾壳澳,否則不能刪除
  1. listFiles(FileFilter filter) 這個(gè)方法需要添加一個(gè)過濾器荞胡,里面重寫accept(File file)方法該方法只能對單層子文件夾中的文件或者目錄進(jìn)行過濾accept(File file)它的返回值是一個(gè)boolean值,如果返回值為false,代表該文件不允許存入到File數(shù)組當(dāng)中如果該方法的返回值為true娱局,代表該文件需要放入到File數(shù)組當(dāng)中
  • 遞歸:方法遞歸
    直接遞歸
    間接遞歸:方法內(nèi)部不是直接調(diào)自己彰亥,而是通過其他方法那還可以再次調(diào)到該方法,形成一個(gè)閉環(huán)
    出口---->邊界條件--->讓當(dāng)前正在執(zhí)行的遞歸方法停止
  • 注意事項(xiàng):
    1.必須有邊界值
    2.使用使用遞歸次數(shù)不能太多衰齐,
    3.構(gòu)造方法不能使用遞歸
  • 文件過濾器 Filter--->過濾器
    在FileFilter類當(dāng)中的accept()方法
    是用來添加滿足條件的文件任斋,如果accept方法的返回值是true,代表該文件(File實(shí)例)是允許存入到File數(shù)組當(dāng)中的如果accept方法的返回值為false,就代表該文件是不允許放入到File數(shù)組當(dāng)中的
// 遞歸方法 遍歷滿足.java文件的文件
    public static void getSpecifiedFile(File f){
        // 匿名內(nèi)部類方式
        File[] files = f.listFiles(new FileFilter() {
            @Override
            public boolean accept(File file) {
                return file.getName().endsWith(".java") || file.isDirectory();
            }
        });

        // 遍歷files
        for (File file : files) {
            if (file.isDirectory()){
                getSpecifiedFile(file);
            } else {
                System.out.println(file.getName()+"-----");
            }
        }
    }
  • IO流
    FileOutputStream類 --->文件字節(jié)輸出流 用于把程序當(dāng)中的數(shù)據(jù)寫入到磁盤的某個(gè)文件中
    因?yàn)樽止?jié)流沒有緩沖區(qū)耻涛,直接調(diào)用操作系統(tǒng)的寫入函數(shù)废酷。在源碼中
    1.FileOutputStream類的write方法直接就是native的瘟檩,也就是調(diào)用操作系統(tǒng)提供的底層函數(shù)。
    源碼如下:
    private native void write(int b, boolean append) throws IOException;
    2.FileOutputStream類沒有重寫父類的flush方法澈蟆,而它父類OutputStream的flush方法是空的墨辛,什么也沒有做
    源碼如下:
    public void flush() throws IOException {
    }
    FileWriter 字符輸入流中,有緩存區(qū)趴俘,在源碼中
    Temporary buffer used to hold writes of strings and single characters
    private char[] writeBuffer;
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末睹簇,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子寥闪,更是在濱河造成了極大的恐慌太惠,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件橙垢,死亡現(xiàn)場離奇詭異垛叨,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)柜某,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進(jìn)店門嗽元,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人喂击,你說我怎么就攤上這事剂癌。” “怎么了翰绊?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵佩谷,是天一觀的道長。 經(jīng)常有香客問我监嗜,道長谐檀,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任裁奇,我火速辦了婚禮桐猬,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘刽肠。我一直安慰自己溃肪,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布音五。 她就那樣靜靜地躺著惫撰,像睡著了一般。 火紅的嫁衣襯著肌膚如雪躺涝。 梳的紋絲不亂的頭發(fā)上厨钻,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼莉撇。 笑死呢蛤,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的棍郎。 我是一名探鬼主播其障,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼涂佃!你這毒婦竟也來了励翼?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤辜荠,失蹤者是張志新(化名)和其女友劉穎汽抚,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體伯病,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡造烁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了午笛。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片惭蟋。...
    茶點(diǎn)故事閱讀 38,577評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖药磺,靈堂內(nèi)的尸體忽然破棺而出告组,到底是詐尸還是另有隱情,我是刑警寧澤癌佩,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布木缝,位于F島的核電站,受9級特大地震影響围辙,放射性物質(zhì)發(fā)生泄漏我碟。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一姚建、第九天 我趴在偏房一處隱蔽的房頂上張望怎囚。 院中可真熱鬧,春花似錦桥胞、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至沥阱,卻和暖如春缎罢,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工策精, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留舰始,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓咽袜,卻偏偏與公主長得像丸卷,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子询刹,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評論 2 348

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