Day11 JaseSE File類的使用

JavaSE File類的使用

  • Java.io.File類:文件和目錄路徑名的抽象表示形式,與平臺無關

  • File能新建、刪除、重命名文件和目錄,但是不能訪問文件內容本身。(需要使用輸入/輸出流)

  • File對象可以作爲參數傳遞給流的構造函數

  • File類的構造方法:

    • public File(String pathname)
    • public File(String parent, String child)

File類代表與平臺無關的文件和目錄。

1 常用方法

  • 訪問文件名:

    函數名稱 函數功能
    getname() 獲取文件名稱
    getPath() 獲取文件路徑
    getAbsolutePath() 獲取絕對路徑,會相對補齊
    getAbsoluteFile() 返回一個用當前文件的絕對路徑構建的file對象
    getParent() 獲取文件/文件夾的父類路徑
    renameTo(File) 使用file對象給文件/文件夾重命名

    案例展示:

    package com.io;
    //訪問文件名案例
    import java.io.File;
    import java.util.zip.GZIPOutputStream;
    
    public class Test1 {
        public static void main(String[] args) {
            File f = new File("/Users/demut/Documents/File/tt.txt");//此時f爲tt.txt文件
            File fp = new File("/Users/demut/Documents/File");//此fp爲目錄
    //        File f1 = new File("/Users/demut/","/Documents/File/tt.txt");//使用相對較少
    //        File f2 = new File("/Users"+File.separator+"/demut/Documents/File/tt.txt");//也可以
          
            System.out.println(f.getName());//獲取文件名稱
            System.out.println(fp.getName());//獲取文件夾名稱
    
            File f3 = new File("src/com/io/Test1.java");//此時使用相對路徑創建file對象
    
            System.out.println(f.getPath());//獲取文件路徑
            System.out.println(f3.getAbsolutePath());//獲取絕對路徑,會自動補齊
    
            System.out.println(f3.getAbsoluteFile()); //返回一個用當前文件的絕對路徑構建的file對象
    
            System.out.println(f3.getParent());//返回當前文件或文件夾的父級路徑
    
            f.renameTo(new File("/Users/demut/Documents/File/ttt.txt"));//給文件或文件夾重命名
        }
    }
    /*運行結果:
    tt.txt
    File
    /Users/demut/Documents/File/tt.txt
    /Users/demut/JAVASE Project/JavaSE/src/com/io/Test1.java
    /Users/demut/JAVASE Project/JavaSE/src/com/io/Test1.java
    src/com/io
    */
    
  • 文件檢測:

    函數名稱 函數功能
    exists() 判斷文件/文件夾是否存在
    canWrite() 判斷文件是否可寫
    canRead() 判斷文件是否可讀
    isFile() 判斷file對象是否爲文件
    isDirectory() 判斷file對象是否爲路徑
    lastModified() 獲取文件最後修改時間,返回一個毫秒數
    length() 獲取文件長度–>字節數

    案例展示:

    package com.io;
    
    import java.io.File;
    
    //文件檢測
    public class Test2 {
        public static void main(String[] args) {
            File file = new File("/Users/demut/Documents/File/ttt.txt");
            System.out.println(file.exists()); //判斷文件或文件夾是否存在
    
            System.out.println(file.canWrite()); //判斷文件是否可寫
            System.out.println(file.canRead()); //判斷文件是否可讀
    
            System.out.println(file.isFile()); //判斷file是否爲文件
            System.out.println(file.isDirectory()); //判斷file是否爲路徑
    
            System.out.println(file.lastModified());//獲取文件的最後修改時間,返回的是一個毫秒數
            System.out.println(file.length()); //獲取文件長度-->字節數
        }
    }
    /*運行結果:
    true
    true
    true
    true
    false
    1583560929000
    0
    */
    
  • 文件操作和目錄操作:

    函數名稱 函數功能
    createNewFile() 創建文件(需要捕獲異常)
    mkdir() 創建單層目錄
    mkdirs() 創建多層目錄
    delete() 刪除文件/文件夾
    list() 返回當前文件夾的子集名稱,包括目錄和文件(String類型)
    listFiles() 返回當前文件夾的子集的file對象,包括目錄和文件(File類型)

    案例展示:

    package com.io;
    
    import java.io.File;
    import java.io.IOException;
    
    //文件操作和目錄操作
    public class Test3 {
        public static void main(String[] args) {
            File file = new File("/Users/demut/Documents/File/tt2.txt");
            if (!file.exists()){
                try {
                    file.createNewFile(); // 創建文件
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            //file.delete(); //刪除文件
    
            File file1 = new File("/Users/demut/Documents/File/aaa/bbb/ccc");
            //file1.mkdir(); //創建單層目錄
            file1.mkdirs(); //創建多層目錄
    
            File file2 = new File("/Users/demut/Documents/File");
    
            String[] fl = file2.list(); //返回當前文件夾的子集的名稱,包括目錄和文件
            for (String s : fl){
                System.out.println(s);
            }
    
            File[] fs = file2.listFiles(); //返回當前文件夾的子集的file對象,包括目錄和文件
            for (File ff : fs) {
                System.out.println(ff);
            }
        }
    }
    /*運行結果:
    tt2.txt
    .DS_Store
    ttt.txt
    aaa
    /Users/demut/Documents/File/tt2.txt
    /Users/demut/Documents/File/.DS_Store
    /Users/demut/Documents/File/ttt.txt
    /Users/demut/Documents/File/aaa
    */
    

2 遞歸遍歷文件需求

現在需要遍歷Targetu文件夾,返回該文件夾下的所有目錄和文件,不論層次。

  • 使用非遞歸,代碼量冗雜,且重複很多。
  • 使用遞歸,很簡潔。

代碼展示:

package com.io;

import java.io.File;

public class Demo01 {
    public static void main(String[] args) {
        File file = new File("/Users/demut/Desktop/Targetu");
        new Demo01().test(file);
    }

    //遞歸遍歷文件
    public void test(File file){
        if (file.isFile()){
            System.out.println(file.getAbsolutePath()+"是文件");
        }else {
            System.out.println(file.getAbsolutePath()+"是文件夾");
            //若爲文件夾,則文件夾內可能有子文件夾或文件
            File[] fs = file.listFiles();//獲取當前文件夾下的子文件夾或者文件的file對象
            if (fs != null && fs.length > 0){
                for(File ff : fs){
                    test(ff); //此處使用遞歸代替了以下代碼
//                    if (ff.isFile()){
//                        System.out.println(file.getAbsolutePath()+"是文件");
//                    }else {
//                        System.out.println(file.getAbsolutePath()+"是文件夾");
//                        File[] fs1 = ff.listFiles();
//                        if (fs1 != null && fs1.length > 0){
//                            for (File ff1 : fs1){
//                                //......    //始終在重複
//                            }
//                        }
//                    }
                }
            }

        }
    }
}
//運行結果可自行調試

寫在最後

驕傲在敗壞以先,狂心在跌倒之前!

To Demut!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章