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());
}
}
文件系統--java控制檯版
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.