java基礎 File與遞歸練習 使用文件過濾器篩選將指定文件夾下的小於200K的小文件獲取並打印按層次打印(包括所有子文件夾的文件) 多層文件夾情況統計文件和文件夾的數量 統計已知類型的數量 未知類型的數量


package com.swift.kuozhan;

import java.io.File;
import java.io.FileFilter;

/*使用文件過濾器篩選將指定文件夾下的小於200K的小文件獲取並打印(包括所有子文件夾的文件)。*/

public class kuaozhan1 {

    public static void main(String[] args) {

        File dir = new File("c:/");
        if(!dir.exists()) {
            throw new RuntimeException("該文件夾不存在");
        }
        get200(dir, 0);
    }

    private static void get200(File dir, int length) {
        if(!dir.exists()) {
            throw new RuntimeException("該文件夾不無訪問權限");
        }
        for (int i = 0; i < length; i++)
            System.out.print("\t");
        System.out.println(dir);
        File[] files = dir.listFiles(new FileFilter() {

            @Override
            public boolean accept(File pathname) {
                if (pathname.isDirectory())
                    return true;
                 if (pathname.isHidden())
                 return false;

                if (pathname.length() / 1024 < 200)
                    return true;
                return false;
            }

        });

        for (File file : files) {
            if (file.isDirectory()) {
                get200(file, length + 1);
            } else {
                for (int i = 0; i < length; i++)
                    System.out.print("\t");
                System.out.println("\t" + file);
            }
        }
    }
}

統計文件夾中(不包含子文件夾)文件大於10byte的文件數量並刪除這些文件

package com.swift.base;

import java.io.File;
import java.io.FileFilter;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;


/*訓練知識點
1.File對象的刪除
2.文件判斷功能
3.文件的大小
4.listFiles

訓練描述
獲取指定路徑的文件對象
如果文件對象存在且是文件夾,輸出文件夾下(不包含子文件夾)文件大小大於10的文件個數及大小大於10文件的名稱
如果大小大於10的文件大於1,根據鍵盤錄入選擇是否刪除這些文件
如果大小大於10的文件小於1,控制台提示沒有文件大於10

操作步驟描述
1.使用File類的構造方法創建文件對象
2.判斷該文件是否存在且是文件夾,如果是:
    a).獲取文件夾下所有的文件對象
    b).創建集合來存放需要刪除的文件對象
    c).遍歷所有文件夾下所有的文件對象
        i).如果文件對象是文件且文件的大小大於10就添加文件到集合中
    d).如果集合中的元素大於1:
        i).輸出集合中元素的個數及所有集合中所有的元素
        ii).提示是否進行刪除
        iii).如果輸入刪除,遍歷集合中所有的file對象進行刪除,並提示**文件已經刪除了
    e).輸出提示文件夾下沒有大小大於10的文件對象*/

public class BaseKnowledge5 {

    public static void main(String[] args) {
        
        File dir=new File("c:/abc");
        if(dir.exists()&&dir.isDirectory()) {
            File[] files = dir.listFiles(new FileFilter() {

                @Override
                public boolean accept(File pathname) {
                    if(pathname.isDirectory()) 
                        return false;
                    if(pathname.length()>10) 
                        return true;
                    return false;
                }});

            List<File> list=new ArrayList<>();
            for(File file:files) {
                list.add(file);
            }
            if(list.size()>1) {
                System.out.println(list.size());
                for(File file:list) {
                    System.out.println(file);
                }
                Scanner scan =new Scanner(System.in);
                System.out.println("請輸入是否刪除? 回答 刪除 和 不刪除");
                String str=scan.nextLine();
                if("刪除".equals(str)) {
                    for(File file:list) {
                        file.delete();
                    }
                    System.out.println("文件已刪除");
                }
            }else {
                System.out.println("沒有大於10的文件");
            }
            
        }
    }

}

 

 統計多層文件夾下文件和文件夾的數量

package com.swift.Test;

import java.io.File;

/*訓練描述

要求:獲取指定路徑下文件及文件夾的個數,包含子目錄中的文件及文件夾
步驟:
    1. 指定要打印的目錄File對象
    2. 調用getFileAll()方法
        2.1 獲取指定目錄中的所有File對象
        2.2 遍歷得到每一個File對象
        2.3 判斷當前File 對象是否是目錄
            判斷結果為true,說明為目錄,通過遞歸,再次調用步驟2的getFileAll()方法
            判斷結果為false,說明是文件,打印文件的路徑*/

public class DemoFile {
    
    public static int dirNums;
    public static int fileNums;
    
    public static void main(String[] args) {
        
        File dir = new File("c:/abc");
        getFileAll(dir,0);
        System.out.println("文件夾的數量是:"+dirNums);
        System.out.println("文件的數量是"+fileNums);
        
    }

    private static void getFileAll(File dir,int deep) {
        dirNums++;
        for(int i=0;i<deep;i++) {
            System.out.print("\t");
        }
        System.out.println(dir);
        File[] files=dir.listFiles();
        for(File file:files) {
            if(file.isDirectory()) {
                getFileAll(file,deep+1);
            }else {
                for(int i=0;i<deep;i++) {
                    System.out.print("\t");
                }
                fileNums++;
                System.out.println("\t"+file);
            }
            
        }
    }

}

 統計已知類型的數量

package com.swift.Test;

import java.io.File;
import java.util.HashMap;
import java.util.Map;

/*已知一個文件夾路徑,統計該文件夾(包含子文件夾)中每種類型的文件及個數
注意:用文件類型(后綴名,不包含.(點),如:"java","txt")作為key,
    用個數作為value,放入到map集合中,並用兩種方式遍歷map集合
    例如:
    doc 的類型的文件有  3 個
    java 的類型的文件有  5 個
    txt 的類型的文件有  7 個*/

//第一種情況統計指定類型文件的數量
public class Jinji1 {

    public static int docNums;
    public static int txtNums;
    public static int javaNums;

    public static void main(String[] args) {

        File dir = new File("c:/abc");
        getNums(dir);
        System.out.println("doc 的類型的文件有 "+docNums);
        System.out.println("java 的類型的文件有 "+javaNums);
        System.out.println("txt 的類型的文件有 "+txtNums);

    }

    private static void getNums(File dir) {
        File[] files = dir.listFiles();
        for (File file : files) {
            if (file.isDirectory()) {
                getNums(file);
            } else {
                if (file.getName().toLowerCase().endsWith("doc")) {
                    docNums++;
                } else if (file.getName().toLowerCase().endsWith("txt")) {
                    txtNums++;
                } else if (file.getName().substring(file.getName().lastIndexOf(".")+1).equals("java")) {
                    javaNums++;
                }
            }
        }
    }

}

統計未知類型的數量

package com.swift.Test;

import java.io.File;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

/*鍵盤錄入一個文件夾路徑,統計該文件夾(包含子文件夾)中每種類型的文件及個數
注意:用文件類型(后綴名,不包含.(點),如:"java","txt")作為key,
    用個數作為value,放入到map集合中,並用兩種方式遍歷map集合
    例如:
    doc 的類型的文件有  3 個
    java 的類型的文件有  5 個
    txt 的類型的文件有  7 個*/

//第二種情況統計未知類型文件的數量
public class FileNums {

    public static void main(String[] args) {
        
        File dir=inputDir();
        Map<String,Integer> map=new HashMap<>();
        getNums(dir,map);
        System.out.println(map);
    }

    private static void getNums(File dir,Map<String, Integer> map) {
        
        File[] files=dir.listFiles();
        for(File file:files) {
            if(file.isDirectory()) {
                getNums(file,map);
            }else {
                String name=file.getName();
                int n=name.lastIndexOf(".")+1;
                name=name.substring(n);
                if(!map.containsKey(name)) {
                    map.put(name, 1);
                }else {
                    map.put(name,map.get(name)+1);
                }
            }
        }
    }

    private static File inputDir() {
        
        Scanner scan = new Scanner(System.in);
        System.out.println("請輸入一個目錄");
        String dir=scan.nextLine();
        File dirF=new File(dir);
        if(!dirF.exists()) {
            throw new RuntimeException("這個目錄不存在!");
        }
        if(!dirF.isDirectory())
            throw new RuntimeException("這不是一個目錄!");
        return dirF;
    }

}

 層級練習

package com.swift.Test;

import java.io.File;
import java.util.Scanner;

/*從鍵盤接收一個文件夾路徑,把文件夾中的所有文件以及文件夾的名字按層級打印
例如:
aaa是文件夾,里面有bbb.txt,ccc.txt,ddd.txt這些文件,有eee這樣的文件夾,eee中有fff.txt和ggg.txt,打印出層級來
    aaa
        bbb.txt
        ccc.txt
        ddd.txt    
        eee
            fff.txt
            ggg.txt*/

public class PringFileCeng {

    public static void main(String[] args) {

        File dir=getDir();
        traverse(dir,0);
    }

    private static void traverse(File dir,int deep) {
        
        for(int i=0;i<deep;i++) {
            System.out.print("\t");
        }
        System.out.println(dir);
        File[] files=dir.listFiles();
        for(File file:files) {
            if(file.isDirectory()) {
                traverse(file,deep+1);
            }else {
                for(int i=0;i<deep;i++) {
                    System.out.print("\t");
                }
                System.out.println("\t"+file);
            }
        }
        
    }

    private static File getDir() {
        
        Scanner scan =new Scanner(System.in);
        System.out.println("請輸入一個目錄:");
        String str=scan.nextLine();
        File dirF=new File(str);
        if(!dirF.exists()) {
            throw new RuntimeException("這個目錄不存在!");
        }
        if(!dirF.isDirectory()) {
            throw new RuntimeException("這不是一個目錄!");
        }
        return dirF;
    }


}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM