獲得某個資料夾下的符合正則表示式的檔案地址
阿新 • • 發佈:2018-11-01
根據使用者需求列出某個資料夾下所有滿足的檔案地址
思路:
1.獲得使用者需要查詢的資料夾和對檔名稱的需求(正則表示式)
使用Scanner物件
2.列出該資料夾下的所有檔案物件
引文資料夾下可能還有資料夾,所有需要 遞迴函式查詢檔案
檔案數目是不確定的,所以需要使用List儲存物件
3.根據正則表示式選擇使用者需求的檔案
根據檔案物件的getName()方法獲得檔名稱和路徑。使用String物件的matches(String regex)判斷檔名稱是否滿足要求
4.輸出滿足要求的路徑
使用File物件的getCanonicalPath()獲得滿足要求物件的絕對路徑。
import java.io.File; import java.io.IOException; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Scanner; public class FileFound { public static void main(String[] args) { //獲得使用者輸入 String[] arr = input(); //通過用輸入路徑初始化File物件 File file = new File(arr[0]); //獲得使用者對檔案的選擇要求 String regex = arr[1]; //獲得資料夾下所有檔案的Flie物件 List<File> lf = getFiles(file); //對list中檔案物件進行選擇 selectFile(lf, regex); //顯示選擇好的檔案路徑 for(File f : lf){ try { System.out.println(f.getCanonicalPath()); } catch (IOException e) { e.printStackTrace(); } } } /* * 獲得使用者輸入 */ private static String[] input(){ //定義並且初始化要返回的字串陣列 String[] result = new String[2]; //輸入檔案地址 Scanner scan = new Scanner(System.in); System.out.println("請輸入要查詢的目錄:"); result[0] = scan.nextLine(); //輸入要選擇檔案型別 System.out.println("請輸入要查詢檔名稱的字串或正則表示式:"); result[1]= scan.nextLine(); //返回使用者輸入 return result; } //在檔案列表中選擇滿足使用者要求的檔案的路徑 public static void selectFile(List<File> lf, String regex) { //foreach和Iterator的區別 //獲得List的Iterator物件 Iterator<File> iterator = lf.iterator(); //對檔案路徑進行遍歷 while(iterator.hasNext()){ File temp = iterator.next(); String name = temp.getName(); //根據使用者要求確定要留下的路徑資訊 if(!name.matches(regex)){ iterator.remove(); } } } /* * 建立List物件並且記錄所有檔案物件 */ public static List<File> getFiles(File file){ List<File> result = new LinkedList<>(); if(file.isDirectory()){ //如果file是資料夾就呼叫自動儲存路徑的方法 getFiles1(file, result); } else { //如果是檔案就將檔案物件儲存 result.add(file); } return result; } //將該檔案下檔案物件儲存在給定的List物件中 private static void getFiles1(File file, List<File> lf){ if(file.isDirectory()){ for(File f : file.listFiles()){ //如果file是檔案及就遞迴呼叫該方法 getFiles1(f, lf); } } else { //如果是檔案就將檔案物件儲存 lf.add(file); } } }