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; } }