文件系统--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());
	}

}

猜你喜欢

转载自blog.csdn.net/Inmaturity_7/article/details/106752327