杨老师课堂_Java核心技术下之控制台模拟文件管理器案例
背景需求介紹:
編寫一個(gè)模擬文件管理器的程序,實(shí)現(xiàn)控制臺(tái)對(duì)文件和文件夾的管理操作。
要求在此程序中:
當(dāng)用戶輸入指令 1 時(shí),代表“指定關(guān)鍵字檢索文件”,此時(shí)需要用戶輸入檢索的目錄和關(guān)鍵
字,系統(tǒng)在用戶指定的目錄下檢索出文件名中包含關(guān)鍵字的文件,并將其絕對(duì)路徑展現(xiàn)出來(lái);
指定 2 時(shí),代表“指定后綴名檢索文件”,此時(shí)需要用戶輸入檢索的目錄和后綴名,系統(tǒng)在用
戶指定的目錄下檢索出指定后綴名的文件,并將其絕對(duì)路徑展現(xiàn)出來(lái)。
指令 3 代表“復(fù)制文件/目錄”,此時(shí)需要用戶輸入源目錄和目標(biāo)目錄,程序執(zhí)行后,或?qū)⑴c原
目錄下的內(nèi)容復(fù)制到目標(biāo)目錄下,
指令 4 代表“退出”即退出該系統(tǒng)。
預(yù)覽效果圖:?
思路解析:
| (1)、根據(jù)任務(wù)介紹和運(yùn)行結(jié)果分析可知,首先需要?jiǎng)?chuàng)建一個(gè)文件管理器內(nèi),可以在類中使
|
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
示例代碼:
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:指定關(guān)鍵字檢索文件 2:指定后綴名檢索文件 3:賦值文件/目錄 4:退出----");while (true) {System.out.println("請(qǐng)輸入命令:");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("您輸入的指令錯(cuò)誤!");break;}}}/*** 指定后綴名檢索文件*/private static void searchBySuffix() {Scanner scan = new Scanner(System.in);System.out.print("請(qǐng)輸入您要檢索的目錄的位置");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("您已退出系統(tǒng),謝謝使用");System.exit(0);}/*** 復(fù)制文件/目錄* * @throws Exception*/private static void copyDirectory() throws Exception {Scanner scan = new Scanner(System.in);System.out.print("請(qǐng)輸入源目錄");String srcDirectory = scan.next();File srcFile = new File(srcDirectory);if (!srcFile.exists() || !srcFile.isDirectory()) {System.out.println("無(wú)效目錄!");return;}System.out.print("請(qǐng)輸入目標(biāo)位置:");String destDirectory = scan.next();File destFile = new File(destDirectory);if (!destFile.exists() || !destFile.isDirectory()) {System.out.println("無(wú)效位置!");return;}FileUtils.copySrcPathToDestPath(srcFile, destFile);}/*** 指定關(guān)鍵字檢索文件*/private static void searchByKeyWorld() {Scanner scan = new Scanner(System.in);System.out.print("請(qǐng)輸入您要檢索的目錄的位置");String path = scan.next();File file = new File(path);if (!file.exists() || !file.isDirectory()) {System.out.println(path + "(不是有效目錄)");return;}System.out.println("您輸入搜索關(guān)鍵字:");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;}/*** 復(fù)制文件/目錄* * @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("無(wú)法創(chuàng)建 + 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();}}}/*** 指定關(guān)鍵字檢索文件* * @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;}};// 遞歸當(dāng)時(shí)獲取規(guī)定的路徑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/
分享是快樂(lè)的,也見證了個(gè)人成長(zhǎng)歷程,文章大多都是工作經(jīng)驗(yàn)總結(jié)以及平時(shí)學(xué)習(xí)積累,基于自身認(rèn)知不足之處在所難免,也請(qǐng)大家指正,共同進(jìn)步。
本文版權(quán)歸作者所有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁(yè)面明顯位置給出, 如有問(wèn)題, 可郵件(397583050@qq.com)咨詢。
轉(zhuǎn)載于:https://www.cnblogs.com/xiaoxiao5016/p/9052764.html
總結(jié)
以上是生活随笔為你收集整理的杨老师课堂_Java核心技术下之控制台模拟文件管理器案例的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 郭美美与47个富商发生性关系?此事你们怎
- 下一篇: 《windows核心编程系列》二谈谈AN