文件系統--java控制檯版

package com.lxf;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;

public class SearchFile {
	// 當前步驟所在的路徑
	public static String filePath = "";

	/**
	 * 顯示根目錄
	 */
	public static void showRoots() {
		// 獲取根目錄所有File對象
		File[] files = File.listRoots();
		//打印所有的根目錄
		for (int i = 0; i < files.length; i++) {
			System.out.println(files[i]);
		}
	}

	/**
	 * 獲取手動輸入的命令
	 */
	public static String getInputStr() {
		// 定義一個空的字符串
		String inputStr = "";
		//BufferedReader獲取輸入流的字符對象
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		System.out.println("當前路徑:" + filePath);
		try {
			// 獲取控制檯輸入的語句
			inputStr = br.readLine();
		} catch (IOException e) {
			e.printStackTrace();
		}
		// 將控制檯輸入的命令返回
		return inputStr;
	}

	/**
	 * 獲取當前路徑所在的文件對象
	 * 
	 * @param name 輸入的文件名
	 */
	public static void getFile(String name) {
		// 如果name爲空直接提示並返回
		if (name.equals("")) {
			System.out.println("請輸入操作命令!");
			SearchFile.getFile(SearchFile.getInputStr());
		}
		// 獲取操作語句
		String operateStr = "";
		// 獲取操作的文件名
		String fileName = "";
		// 單獨輸入一單詞如:dir、back、esc會報錯,直接try catch解決
		try {
			operateStr = name.substring(0, name.indexOf(" "));
			// 打印fileName測試語句
			//System.out.println("operateStr=" + operateStr);
			fileName = name.substring(name.indexOf(" ") + 1);
			// 打印fileName測試語句
			//System.out.println("fileName=" + fileName);
		} catch (Exception e) {
			// 將name直接賦值給operateStr
			operateStr = name;
			// 將name賦值爲null
			fileName = null;
		}
		File file = null;// 定義一個File對象的引用,用來接收當前的file對象
		if ("back".equalsIgnoreCase(operateStr)) {// 如果輸入的是back
			file = new File(SearchFile.filePath);
			file = file.getParentFile();// 獲取上一級路徑
			if (file != null) {
				SearchFile.filePath = file.getPath();// 獲取上一級路徑
			} else {
				// 回到根目錄
				SearchFile.filePath = "";
				System.out.println("已經到了根目錄,不能再回退了!");
				// 如果文件不存在,顯示根路徑
				SearchFile.showRoots();
			}
		} else if ("esc".equalsIgnoreCase(operateStr)) {
			//退出程序
			System.out.println("程序結束!");
			System.exit(0);
		} else if ("cd".equalsIgnoreCase(operateStr)) {
			//進入目錄
			CD(fileName);
		} else if ("crt".equalsIgnoreCase(operateStr)) {
			//創建文件
			CREATE(fileName);
		} else if ("del".equalsIgnoreCase(operateStr)) {
			//刪除文件
			DEL(fileName);
		} else if ("dir".equalsIgnoreCase(operateStr)) {
			//顯示該文件夾下的所有文件和文件夾
			Dir();
		} else if ("listAllDir".equals(operateStr)) {
			//展示本電腦所有的文件夾及文件
			LSALL();
		} else if ("md".equalsIgnoreCase(operateStr)) {
			//創建文件夾
			MD(fileName);
		} else if ("rd".equalsIgnoreCase(operateStr)) {
			//移除文件夾
			RD(fileName);
		} else {
			// 命令操作不存在,提示重新輸入
			System.out.println("該命令操作不存在,請重新輸入!");
		}
		// 遞歸
		SearchFile.getFile(SearchFile.getInputStr());
	}

	/**
	 * 改變目錄 進入輸入的目錄
	 * @param fileName
	 */
	public static void CD(String fileName) {
		// 創建當前目錄下的文件對象
		File file1 = new File(filePath + File.separator + fileName);
		// File file2=null;
		if (file1.exists() && file1.isDirectory()) {
			// 進入目錄成功,修改當前所在的路徑
			if (filePath.equals("")) {
				//filepath爲空,直接將fileName賦值給filePath
				filePath = fileName;
			} else {
				//filepath不爲空,拼接路徑
				// File.separator:文件路徑分割符
				filePath = filePath + File.separator + fileName;
			}
		} else {
			// 提示信息:不是文件夾或文件夾名不存在
			System.out.println("輸入不是文件夾或文件夾名不存在!請重新輸入");
		}
	}

	/**
	 * 根據文件名在此目錄下創建文件
	 * @param fileName
	 */
	public static void CREATE(String fileName) {
		// 創建一個空值文件對象
		File file1 = null;
		// 創建父路徑的文件對象
		File file2 = new File(filePath);
		if ("".equals(SearchFile.filePath)) {
			// 根目錄下沒選擇情況下,報出提示信息,並退出到命令行
			System.out.println("請選擇根目錄!");
			// 打印根目錄
			SearchFile.showRoots();
		} else {
			if (fileName.equals("")) {// 如果文件名爲空直接提示信息,退回到命令行
				System.out.println("文件名爲空,請重新輸入!");
			} else {
				// 否則不是根目錄,拿當前路徑進行拼接
				file1 = new File(SearchFile.filePath + File.separator + fileName);
				if (!file2.isDirectory()) {
					// 父路徑不是文件夾無法創建,報出提示信息,並退出到命令行
					System.out.println("無法在文件下創建文件,請選擇目錄!");
				} else if (file1.exists()) {
					// 文件已存在,無法繼續創建,報出提示信息,並退出到命令行
					System.out.println("該文件已存在,無法繼續創建!");
				} else {
					// 創建文件
					try {
						file1.createNewFile();
						// 創建文件成功,並退出到命令行
						System.out.println("創建文件成功!");
					} catch (IOException e) {
						// 創建文件成功,報錯出錯信息,並退出到命令行
						System.out.println("文件格式錯誤或其它原因,請重新創建!");
					}
				}
			}
		}
	}

	/**
	 * 根據文件名刪除該目錄下的文件
	 * @param fileName
	 */
	public static void DEL(String fileName) {
		// 創建一個空值文件對象
		File file1 = null;
		if ("".equals(SearchFile.filePath)) {
			// 根目錄下沒選擇情況下,報出提示信息,並退出到命令行
			System.out.println("請選擇根目錄!");
			// 打印根目錄
			SearchFile.showRoots();
		} else {
			if (fileName.equals("")) {// 如果文件名爲空直接提示信息,退回到命令行
				System.out.println("文件名爲空,請輸入文件名重試");
			} else {
				// 否則不是根目錄,拿當前路徑進行拼接
				file1 = new File(SearchFile.filePath + File.separator + fileName);
				if (file1.exists() && file1.isDirectory()) {
					// 父路徑不是文件夾無法刪除,報出提示信息,並退出到命令行
					System.out.println("無法刪除目錄!");
				} else if (file1.exists() && !file1.isDirectory()) {
					// 文件存在且不是文件夾,刪除該文件
					file1.delete();
					System.out.println("該文件已被成功刪除!");
				}
			}
		}
	}

	/**
	 * 顯示本目錄下所有兄弟目錄和文件
	 */
	public static void Dir() {
		// 新建當前路徑的文件對象
		File file = new File(filePath);
		// 如果文件存在且爲文件夾,直接展示文件夾下的內容
		if (file.exists() && file.isDirectory()) {
			showFiles(file);
		}
	}

	/*
	 * 顯示所有目錄和文件
	 */
	public static void LSALL() {
		// 獲取電腦所有的根目錄
		File[] files = File.listRoots();
		for (int i = 0; i < files.length; i++) {
			// 將電腦所有的目錄顯示出來
			listAllDir(files[i]);
		}
	}

	/**
	 * 根據目錄名 創建目錄
	 * @param fileName
	 */
	public static void MD(String fileName) {
		// 創建一個空值文件對象
		File file1 = null;
		// 創建父路徑的文件對象
		File file2 = new File(filePath);
		if ("".equals(SearchFile.filePath)) {
			// 根目錄下沒選擇情況下,報出提示信息,並退出到命令行
			System.out.println("請選擇根目錄!");
			// 打印根目錄
			SearchFile.showRoots();
		} else {
			if (fileName.equals("")) {// 如果文件名爲空直接提示信息,退回到命令行
				System.out.println("文件目錄名爲空,請重新輸入!");
			} else {
				// 否則不是根目錄,拿當前路徑進行拼接
				file1 = new File(SearchFile.filePath + File.separator + fileName);
				if (!file2.isDirectory()) {
					// 父路徑不是文件夾無法創建,報出提示信息,並退出到命令行
					System.out.println("請在目錄下創建!");
				} else if (file1.exists() && file1.isDirectory()) {
					// 文件已存在,無法繼續創建,報出提示信息,並退出到命令行
					System.out.println("該文件目錄已存在,無法繼續創建");
				} else {
					// 創建文件
					file1.mkdirs();
					// 創建文件成功,並退出到命令行
					System.out.println("創建目錄成功!");
				}
			}
		}
	}

	/*
	 *根據輸入的目錄名,移除當前目錄下的對應目錄及其包含的所有文件夾及文件
	 */
	public static void RD(String fileName) {
		// 創建一個空值文件對象
		File file1 = null;
		// 創建父路徑的文件對象
		File file2 = new File(filePath);
		if (fileName.equals("")) {
			// 如果文件名爲空直接提示信息,退回到命令行
			System.out.println("要刪除的文件目錄名爲空,請重新輸入!");
		} else {
			// 拿當前路徑進行拼接,
			file1 = new File(SearchFile.filePath + File.separator + fileName);
			if (file1.exists() && file1.isDirectory()) {	// 該文件夾存在
				// 刪除文件夾包括文件下的所有東西
				deleteDir(file1);
				//刪除成功打印語句
				System.out.println("刪除該目錄成功!");
				
			} else {
				// 父路徑不是文件夾無法移除條件下的文件夾,報出提示信息,並退出到命令行
				System.out.println("該目錄下沒有要刪除的目標目錄!");
			}
		}
	}

	/**
	 * 刪除傳入的文件夾下的所有東西
	 * @param file1
	 */
	private static void deleteDir(File file1) {
		//列出該文件下的所有文件夾及文件
		File[] files=file1.listFiles();
		//判斷該文件下是否有東西
		if(files!=null&&files.length>0) {
			//該目錄下有文件夾或者文件
			for (int i = 0; i < files.length; i++) {
				//判斷這個目錄下的所有東西,文件夾--》遞歸,文件--》刪除
				//直到把所有的文件及文件夾刪除
				if(files[i].exists()&&!files[i].isDirectory()) {
					files[i].delete();
				}else if(files[i].exists()&&files[i].isDirectory()){
					//刪除該文件夾下的所有東西
					deleteDir(files[i]);
					file1.delete();
				}
			}
		}else {
			//判斷file1是否存在
			if(file1.exists()) {
				file1.delete();
			}
		}
	}

	/**
	 * 將得到的File對象進行顯示
	 */
	public static void showFiles(File file) {
		if (file != null) {// 文件是否爲空
			if (file.exists()) {// 文件是否存在
				if (file.isDirectory()) {// 是否是文件夾
					File[] files = file.listFiles();
					if (files != null && files.length > 0) {
						for (int i = 0; i < files.length; i++) {
							if (files[i].isDirectory()) {// 是否爲文件夾
								System.out.println(files[i] + "\t文件夾");
							} else {
								System.out.println(files[i] + "\t文件");
							}
						}
					} else {
						System.out.println(file + "\t這個文件夾爲空!");
					}
				} else {
					System.out.println(file + "\t文件");
				}
			}
		}
	}

	// 顯示電腦所有的目錄
	public static void listAllDir(File file) {
		// 如果文件存在,且爲文件夾,就打印它下面所有的文件和目錄
		if (file.exists() && file.isDirectory()) {
			// 打印它下面所有的文件和目錄
			showFiles(file);
			//獲取該文件夾下所有的文件和文件夾
			File[] files = file.listFiles();
			//判斷該文件夾下是否有文件夾和文件
			if(files!=null&&files.length>0) {
				for (int i = 0; i < files.length; i++) {
					//列出改文件下所有的文件夾和文件
					//文件-->跳過。文件夾-->列出打印再判斷
					if(files[i].exists()&&files[i].isDirectory()) {
						// 遞歸調用,將該目錄下所有的文件和目錄再傳入函數
						listAllDir(files[i]);
					}
				}
			}
		}
	}

	public static void main(String[] args) {
		// 操作命令(直接使用):
		//back(返回上一級)、esc(退出程序)
		//dir(展示當前文件夾下的所有文件及目錄)、listAllDir(展示電腦所有的文件及目錄)
		
		// cd(進入目錄)、crt(創建文件)、del(刪除文件)、
		//md(創建目錄)、rd(移除目錄)");
		// 請輸入命令(命令+空格+文件名或文件夾)如:cd C:\
		
		// 打印根目錄
		SearchFile.showRoots();
		// 調用獲取命令的函數
		SearchFile.getFile(SearchFile.getInputStr());
	}

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章