天天看點

java學習筆記44:File類的基本用法、遞歸列印目錄樹結構(遞歸周遊目錄結構和樹狀展現)

一、Flie類的基本用法

       java.io.File類:代表檔案和目錄。 在開發中,讀取檔案、生成檔案、删除檔案、修改檔案的屬性時經常會用到本類。

File類的常見構造方法:public File(String pathname)

  以pathname為路徑建立File對象,如果pathname是相對路徑,則預設的目前路徑在系統屬性user.dir中存儲,如下示例所示。

示例:檔案的建立

import java.io.File;
public class TestFile1 {
    public static void main(String[] args) throws Exception {
        System.out.println(System.getProperty("user.dir"));
        File f = new File("a.txt"); //相對路徑:預設放到user.dir目錄下面
        f.createNewFile();//建立檔案
        File f2 = new File("d:/b.txt");//絕對路徑
        f2.createNewFile();
    }
}
           

在eclipse項目開發中,user.dir就是本項目的目錄。是以,執行完畢後,在本項目和D盤下都生成了新的檔案(如果是eclipse下,一定按F5重新整理目錄結構才能看到新檔案)。如下圖所示。

java學習筆記44:File類的基本用法、遞歸列印目錄樹結構(遞歸周遊目錄結構和樹狀展現)

通過File對象可以通路檔案的屬性:

java學習筆記44:File類的基本用法、遞歸列印目錄樹結構(遞歸周遊目錄結構和樹狀展現)

示例:測試File類通路屬性的基本用法

import java.io.File;
import java.util.Date;
public class TestFile2 {
    public static void main(String[] args) throws Exception {
        File f = new File("d:/b.txt");
        System.out.println("File是否存在:"+f.exists());
        System.out.println("File是否是目錄:"+f.isDirectory());
        System.out.println("File是否是檔案:"+f.isFile());
        System.out.println("File最後修改時間:"+new Date(f.lastModified()));
        System.out.println("File的大小:"+f.length());
        System.out.println("File的檔案名:"+f.getName());
        System.out.println("File的目錄路徑:"+f.getPath());
    }
}
           

運作結果:

java學習筆記44:File類的基本用法、遞歸列印目錄樹結構(遞歸周遊目錄結構和樹狀展現)

通過File對象建立空檔案或目錄(在該對象所指的檔案或目錄不存在的情況下)

java學習筆記44:File類的基本用法、遞歸列印目錄樹結構(遞歸周遊目錄結構和樹狀展現)

執行個體代碼:

import java.io.File;
import java.io.IOException;
import java.util.Date;

/**
 * 測試File類的基本用法
 *
 */
public class Test {
	public static void main(String[] args) throws IOException {
		
		//擷取系統中的File(如果File是檔案,那麼就是檔案;如果是目錄,那麼就是目錄)
		//File f = new File("d:/a.txt");
		File f = new File("d:\\a.txt");    //正反斜杠的寫法
	    System.out.println(f);    //隻列印檔案的位址,不會列印檔案内容
	    
	    //将a.txt重命名為bb.txt
	    f.renameTo(new File("d:/bb.txt")); 
	    
	    //在eclipse裡跑打開的是eclipse的工作目錄
	    System.out.println(System.getProperty("user.dir"));
	    
	    //建立一個新的檔案
	    File f2 = new File("gg.txt");    //不加目錄,預設建在目前
	    f2.createNewFile();    //建立新的檔案,抛出異常
	    
	    System.out.println("File是否存在:"+f2.exists());
        System.out.println("File是否是目錄:"+f2.isDirectory());
        System.out.println("File是否是檔案:"+f2.isFile());
        System.out.println("File最後修改時間:"+new Date(f2.lastModified()));
        System.out.println("File的大小:"+f2.length());
        System.out.println("File的檔案名:"+f2.getName());
        System.out.println("File的目錄路徑:"+f2.getPath());    //目前檔案,直接導出來了
        System.out.println("File的目錄路徑:"+f2.getAbsolutePath());    //絕對路徑
	}
}

           

示例:使用mkdir建立目錄

import java.io.File;
public class TestFile3 {
    public static void main(String[] args) throws Exception {
        File f = new File("d:/c.txt");
        f.createNewFile(); // 會在d盤下面生成c.txt檔案
        f.delete(); // 将該檔案或目錄從硬碟上删除
        File f2 = new File("d:/電影/華語/大陸");
        boolean flag = f2.mkdir(); //目錄結構中有一個不存在,則不會建立整個目錄樹
        System.out.println(flag);//建立失敗
    }
}
           

運作結果:

java學習筆記44:File類的基本用法、遞歸列印目錄樹結構(遞歸周遊目錄結構和樹狀展現)

示例:使用mkdirs建立目錄

import java.io.File;
public class TestFile4 {
    public static void main(String[] args) throws Exception {
        File f = new File("d:/c.txt");
        f.createNewFile(); // 會在d盤下面生成c.txt檔案
        f.delete(); // 将該檔案或目錄從硬碟上删除
        File f2 = new File("d:/電影/華語/大陸");
        boolean flag = f2.mkdirs();//目錄結構中有一個不存在也沒關系;建立整個目錄樹
        System.out.println(flag);//建立成功
    }
}
           

運作結果:

java學習筆記44:File類的基本用法、遞歸列印目錄樹結構(遞歸周遊目錄結構和樹狀展現)

執行個體:File類的綜合應用

import java.io.File;
import java.io.IOException;
public class TestFile5 {
    public static void main(String[] args) {
        //指定一個檔案
        File file = new File("d:/sxt/b.txt");
        //判斷該檔案是否存在
        boolean flag= file.exists();
        //如果存在就删除,如果不存在就建立
        if(flag){
            //删除
            boolean flagd = file.delete();
            if(flagd){
                System.out.println("删除成功");
            }else{
                System.out.println("删除失敗");
            }
        }else{
            //建立
            boolean flagn = true;
            try {
                //如果目錄不存在,先建立目錄
                File dir = file.getParentFile();
                dir.mkdirs();
                //建立檔案
                flagn = file.createNewFile();
                System.out.println("建立成功");
            } catch (IOException e) {
                System.out.println("建立失敗");
                e.printStackTrace();
            }          
        }
        //檔案重命名(同學可以自己測試一下)
        //file.renameTo(new File("d:/readme.txt"));
    }
}
           

第一次運作結果:

java學習筆記44:File類的基本用法、遞歸列印目錄樹結構(遞歸周遊目錄結構和樹狀展現)

第二次運作結果:

java學習筆記44:File類的基本用法、遞歸列印目錄樹結構(遞歸周遊目錄結構和樹狀展現)

二、遞歸列印目錄樹結構(遞歸周遊目錄結構和樹狀展現)

       本節結合前面給大家講的遞歸算法,展示目錄結構。大家可以先建立一個目錄,下面增加幾個子檔案夾或者檔案,用于測試。

示例:使用遞歸算法,以樹狀結構展示目錄樹

import java.io.File;

/**
 * 
 * 使用遞歸算法列印目錄樹
 *
 */
public class Test {
    public static void main(String[] args) {
        File f = new File("d:/電影");
        printFile(f, 0);
    }
    /**
     * 列印檔案資訊
     * @param file 檔案名稱
     * @param level 層次數(實際就是:第幾次遞歸調用)
     */
    static void printFile(File file, int level) {
        //輸出層次數
        for (int i = 0; i < level; i++) {
            System.out.print("-");
        }
        //輸出檔案名
        System.out.println(file.getName());
        //如果file是目錄,則擷取子檔案清單,并對每個子檔案進行相同的操作
        if (file.isDirectory()) {
            File[] files = file.listFiles();
            for (File temp : files) {
                //遞歸調用該方法:注意等+1
                printFile(temp, level + 1);
            }
        }
    }
}
           

運作結果:

java學習筆記44:File類的基本用法、遞歸列印目錄樹結構(遞歸周遊目錄結構和樹狀展現)