背景需求介紹:
編寫一個模擬文件管理器的程序,實現控制台對文件和文件夾的管理操作。
要求在此程序中:
當用戶輸入指令 1 時,代表“指定關鍵字檢索文件”,此時需要用戶輸入檢索的目錄和關鍵
字,系統在用戶指定的目錄下檢索出文件名中包含關鍵字的文件,並將其絕對路徑展現出來;
指定 2 時,代表“指定后綴名檢索文件”,此時需要用戶輸入檢索的目錄和后綴名,系統在用
戶指定的目錄下檢索出指定后綴名的文件,並將其絕對路徑展現出來。
指令 3 代表“復制文件/目錄”,此時需要用戶輸入源目錄和目標目錄,程序執行后,或將與原
目錄下的內容復制到目標目錄下,
指令 4 代表“退出”即退出該系統。
預覽效果圖:
思路解析:
(1)、根據任務介紹和運行結果分析可知,首先需要創建一個文件管理器內,可以在類中使
|
示例代碼:
package cn.javabs.iocase; import java.io.File; import java.util.ArrayList; import java.util.Scanner; /** * * @author Mryang * */ public class DocumentManager { public static void main(String[] args) throws Exception { Scanner scan = new Scanner(System.in); System.out.println("---1:指定關鍵字檢索文件 2:指定后綴名檢索文件 3:賦值文件/目錄 4:退出----"); while (true) { System.out.println("請輸入命令:"); int command = scan.nextInt(); switch (command) { case 1: searchByKeyWorld(); break; case 2: searchBySuffix(); break; case 3: copyDirectory(); case 4: exit(); break; default: System.out.println("您輸入的指令錯誤!"); break; } } } /** * 指定后綴名檢索文件 */ private static void searchBySuffix() { Scanner scan = new Scanner(System.in); System.out.print("請輸入您要檢索的目錄的位置"); String path = scan.next(); File file = new File(path); if (!file.exists() || !file.isDirectory()) { System.out.println(path + "(不是有效目錄)"); return; } System.out.println("您輸入搜索后綴:"); String suffix = scan.next(); String[] suffixArray = suffix.split(","); ArrayList<String> list = FileUtils.listFiles(file, suffixArray); for (Object obj : list) { System.out.println(obj); } } /** * 退出 */ private static void exit() { System.out.println("您已退出系統,謝謝使用"); System.exit(0); } /** * 復制文件/目錄 * * @throws Exception */ private static void copyDirectory() throws Exception { Scanner scan = new Scanner(System.in); System.out.print("請輸入源目錄"); String srcDirectory = scan.next(); File srcFile = new File(srcDirectory); if (!srcFile.exists() || !srcFile.isDirectory()) { System.out.println("無效目錄!"); return; } System.out.print("請輸入目標位置:"); String destDirectory = scan.next(); File destFile = new File(destDirectory); if (!destFile.exists() || !destFile.isDirectory()) { System.out.println("無效位置!"); return; } FileUtils.copySrcPathToDestPath(srcFile, destFile); } /** * 指定關鍵字檢索文件 */ private static void searchByKeyWorld() { Scanner scan = new Scanner(System.in); System.out.print("請輸入您要檢索的目錄的位置"); String path = scan.next(); File file = new File(path); if (!file.exists() || !file.isDirectory()) { System.out.println(path + "(不是有效目錄)"); return; } System.out.println("您輸入搜索關鍵字:"); String key = scan.next(); ArrayList<String> list = FileUtils.listFiles(file, key); for (Object obj : list) { System.out.println(obj); } } }
工具類:
package cn.javabs.iocase; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FilenameFilter; import java.util.ArrayList; public class FileUtils { public static ArrayList<String> listFiles(File file, final String[] suffixArray) { FilenameFilter filter = new FilenameFilter() { @Override public boolean accept(File dir, String name) { File currFile = new File(dir, name); if (currFile.isFile()) { for (String suffix : suffixArray) { if (name.endsWith("." + suffix)) { return true; } } } return false; } }; ArrayList<String> arraylist = fileDir(file, filter); return arraylist; } /** * 復制文件/目錄 * * @param srcFile * @param desFile * @throws Exception */ public static void copySrcPathToDestPath(File srcFile, File destFile) throws Exception { File[] files = srcFile.listFiles(); for (int i = 0; i < files.length; i++) { File copiedFile = new File(destFile, files[i].getName()); if (files[i].isDirectory()) { if (!copiedFile.mkdirs()) { System.out.println("無法創建 + copiedFile"); return; } copySrcPathToDestPath(files[i], copiedFile); } else { FileInputStream input = new FileInputStream(files[i]); FileOutputStream output = new FileOutputStream(copiedFile); byte[] buffer = new byte[1024]; int len = 0; while ((len = input.read(buffer)) != -1) { output.write(buffer, 0, len); } input.close(); output.close(); } } } /** * 指定關鍵字檢索文件 * * @param file * @param key * @return */ public static ArrayList<String> listFiles(File file, final String key) { FilenameFilter filter = new FilenameFilter() { @Override public boolean accept(File dir, String name) { File currFile = new File(dir, name); if (currFile.isFile() && name.contains(key)) { return true; } return false; } }; // 遞歸當時獲取規定的路徑 ArrayList<String> arraylist = fileDir(file, filter); return arraylist; } /** * * @param dir * @param filter * @return */ private static ArrayList<String> fileDir(File dir, FilenameFilter filter) { ArrayList<String> arraylist = new ArrayList<String>(); File[] lists = dir.listFiles(filter); for (File list : lists) { arraylist.add(list.getAbsolutePath()); } File[] files = dir.listFiles(); for (File file : files) { if (file.isDirectory()) { ArrayList<String> every = fileDir(file, filter); arraylist.addAll(every); } } return arraylist; } }
作者: 楊校
出處: https://www.cnblogs.com/xiaoxiao5016/
分享是快樂的,也見證了個人成長歷程,文章大多都是工作經驗總結以及平時學習積累,基於自身認知不足之處在所難免,也請大家指正,共同進步。
本文版權歸作者所有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出, 如有問題, 可郵件(397583050@qq.com)咨詢。