package com.sf.iotest;

import org.junit.Test;

import java.io.File;

public class ListFilesTest {

    public static void printSubFile(File dir){
        //打印目录的子文件
        File[] subfiles = dir.listFiles();
        for (File f : subfiles) {
        if(f.isDirectory()){//文件目录
            printSubFile(f);
        }else {//文件
            System.out.println(f.getAbsolutePath());
        }
        }
    }

    @Test
    public void testListAllFiles(){
        // 1.创建目录对象
        File dir = new File("D:\\demo");
        // 2.打印目录的子文件
        printSubFile(dir);
    }


    /**
     * 拓展1   求指定目录所在的空间大小
     */
    public long getDirectorySize(File file){
        // file是文件，那么直接返回file.length()
        // file是目录，把它的下一级的所有file大小加起来就是它的总大小
        long size = 0;
        if(file.isFile()){
            size = file.length();
        }else {
            File[] files = file.listFiles();//获取file的下一级
            for (File file1 : files) {
                size += getDirectorySize(file);//f的大小
            }
        }
        return size;
    }


    /**
     * 拓展2   删除指定目录
     * @param file
     */
    public void deleteDirectory(File file){
        // 如果file是文件，直接delete
        // 如果file是目录，先把它的下一级干掉，然后删除自己
        if(file.isDirectory()){
            File[] files = file.listFiles();
            //循环删除的是file的下一级
            for (File f : files) { //f代表file的每一个下级
                deleteDirectory(f);
            }
        }
        file.delete();
    }

}
