杨老师课堂_Java核心技术下之控制台模拟文件管理器案例
背景需求介紹:
編寫一個模擬文件管理器的程序,實現控制臺對文件和文件夾的管理操作。
要求在此程序中:
當用戶輸入指令 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() {@Overridepublic 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() {@Overridepublic 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)咨詢。
轉載于:https://www.cnblogs.com/xiaoxiao5016/p/9052764.html
總結
以上是生活随笔為你收集整理的杨老师课堂_Java核心技术下之控制台模拟文件管理器案例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 郭美美与47个富商发生性关系?此事你们怎
- 下一篇: 《windows核心编程系列》二谈谈AN