模擬CMD操作文件(夾)

来源:https://www.cnblogs.com/ll-hb/archive/2020/04/15/12687358.html
-Advertisement-
Play Games

在控制台模擬操作cmd 我們設計簡單的程式實現以下功能 1.cd顯示當前目錄的名稱或將其更改。 2.date顯示時間 3.md 創建一個目錄 4. rd 刪除目錄 5.dir 顯示一個目錄中的文件和子目錄 6 help 提示操作 代碼 先在項目下創建一個help.txt文件,內容從cmd的help中 ...


在控制台模擬操作cmd

cmd一般操作界面

我們設計簡單的程式實現以下功能

1.cd顯示當前目錄的名稱或將其更改。

2.date顯示時間

3.md 創建一個目錄

4. rd 刪除目錄

5.dir 顯示一個目錄中的文件和子目錄

6 help 提示操作

 

代碼

先在項目下創建一個help.txt文件,內容從cmd的help中拷貝。

 

package com.nll.io;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;

public class Cmd {
public static void main(String[] args) {
    System.out.println("************************************");
    System.out.println("****************nll*****************************");
    System.out.println("****************@2020****************");
    System.out.println("*************************************");
    //先來顯示我們有哪些盤
    showRoot();
    
    //我們給一個預設的路徑 我們預設的是第一個盤
    String path=File.listRoots()[0].getPath();

    Scanner sc=new Scanner(System.in);
    //開始迴圈的來輸入指令
    while(true) {
        //首先 先展示
        System.out.print(path+">");//這個>沒有其他意思,主要是為了和cmd一致
        
        String  cmd=sc.nextLine();
        //開始判斷指令
        if("help".equalsIgnoreCase(cmd)) {
            help();
        }else if(cmd.endsWith(":")) {
            path=changeDisk(cmd,path);
            System.out.println();
        }else if("dir".equalsIgnoreCase(cmd)) {
            dir(path);
        }else if(cmd.startsWith("cd ")) {
            path=cd(cmd,path);
        }else if(cmd.startsWith("copy ")) {
            copy(cmd,path);
        }else if(cmd.startsWith("del ")) {
            del(cmd,path);
        }else if(cmd.startsWith("md ")){
            md(cmd,path);
        }else if(cmd.startsWith("rd")) {
            rd(cmd,path);
        }else if(cmd.equals("date")) {
            Calendar c=Calendar.getInstance();
            Date d=new Date();
             int i=(c.get(Calendar.DAY_OF_WEEK))-1;
            
            SimpleDateFormat sdf=new SimpleDateFormat("YYYY/MM/dd"+"\t"+(i==0?"日":"i"));
            System.out.println("當前日期:"+sdf.format(d));
        }else {
            System.out.println("'"+cmd+"'不是內部或外部命令,也不是可運行的程式\n");
        }
        
    }
    
}
private static void rd(String cmd, String path) {
    // TODO Auto-generated method stub
    String c=cmd.substring(3).trim();
    File dir=new File(path+"\\"+c);
    deleleAll(dir);
    System.out.println("刪除成功!");
}
private static void deleleAll(File f) {
    // TODO Auto-generated method stub
    // TODO Auto-generated method stub
    //首先判斷 你這個f是文件還是目錄
    if(f.isFile()) {
        //如果是文件 則直接刪除
        f.delete();
        return;
    }
    //目錄 則獲取到所有文件
    File[] fs=f.listFiles();
    for(File file:fs) {
        deleleAll(file);//遞歸自己調用自己
    }
    f.delete();//刪除目錄
}
private static void md(String cmd, String path) {
    // TODO Auto-generated method stub
    String c=cmd.substring(3).trim();
    File dir=new File(path+"\\"+c);
    if(!dir.exists()) {
        dir.mkdir(); 
        System.out.println(c+"創建成功");
    }else {
        System.out.println("創建失敗");
    }
    
}
private static void del(String cmd, String path) {
    // TODO Auto-generated method stub
    String c=cmd.substring(4).trim();
    File f=new File(path,c);
    if(f.exists()&&f.isFile())
    {
    File f2=new File(path+"\\"+c);
    f2.delete();
    }else {
        System.out.println("此文件不存在或不可刪除");
    }
}
private static void copy(String cmd, String path) {
    // TODO Auto-generated method stub
    String [] arr=cmd.split(" ");
     File f1=new File(path,arr[1]);
     File f2=new File(path,arr[2]);
     
     if(f1.exists()&&f2.exists()&&f1.isFile()&&f2.isFile()) {
         copy1(arr[1],arr[2],path);
     }
     
}
private static void copy1(String a1, String a2, String path) {
    // TODO Auto-generated method stub
    File f1=new File(path+"\\"+a1);
    File f2=new File(path+"\\"+a2);
    try {
        BufferedInputStream bis=new BufferedInputStream(new FileInputStream(f1));
        byte [] b=new byte[bis.available()];
        bis.read(b);
        bis.close();
        OutputStream os=new FileOutputStream(f2);
        os.write(b);
        os.close();
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
private static String cd(String cmd, String path) {
    String newPath=cmd.substring(3).trim();
    if(".".equalsIgnoreCase(newPath)) {
        return path;
        
    }else if("..".equalsIgnoreCase(newPath)) {
        //返回上一級
        File f=new File(path);
        String parents=f.getParent();
        if(parents!=null) {
            return parents;
        }else {
            return path;
        }
    }else {
        //切換文件夾
        
        File file=new File(path,newPath);
        if(file.exists()&&file.isDirectory()) {
            return file.getPath();
            
        }else {
            //沒有
            System.out.print("系統找不到指定的路徑。\n");
            return path;
        }
    }
}
private static void dir(String path) {
    // TODO Auto-generated method stub
    //先根據當前目錄 來獲取到所有的子文件
    File file=new File(path);
    File [] fs=file.listFiles();
    int fnum=0;
    int dnum=0;
    
    System.out.print("\n");
    for(File f:fs) {
        long time=f.lastModified();
        Date d=new Date(time);
        SimpleDateFormat sdf=new SimpleDateFormat("YYYY年MM月dd日   HH:mm");
        System.out.print(sdf.format(d));
        //接著判斷是否是目錄
        if(f.isDirectory()) {
            dnum++;
            System.out.print("\t目錄\t\t");
        }else {
            fnum++;
            if(f.length()>10000000)
            {
                System.out.print("\t\t"+f.length());
            }else {
                System.out.print("\t\t"+f.length()+"\t");
            }
            
        }
    
    System.out.print("\t"+f.getName()+"\n");
    }
    System.out.print("\n總共"+fnum+"個文件,總共"+dnum+"個目錄\n");
}
private static String changeDisk(String cmd, String path) {
    if(new File(cmd).exists()) {
        return cmd.toUpperCase()+"\\";
    }else {
        System.out.print("系統找不到指定的驅動器。\n");
        return path;
    }
    
}

//help指令的方法
private static void help() {
    // TODO Auto-generated method stub
    try {
        BufferedInputStream bis=new BufferedInputStream(new FileInputStream("help.txt"));
        byte[] b =new byte[bis.available()];
        bis.read(b);
        //讀出來之後顯示
        String str=new String(b);
        System.out.println(str+"\n");
        //流使用完之後 避免浪費記憶體 記得關閉流
        bis.close();
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

private static void showRoot() {
    // TODO Auto-generated method stub
    File[] fs=File.listRoots();
    for(File f:fs) {
        System.out.print(f.getPath()+"\t");
    }
    System.out.println("\n\n");
}
}

 

效果如下

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言 文的文字及圖片來源於網路,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯繫我們以作處理。 PS:如有需要Python學習資料的小伙伴可以加點擊下方鏈接自行獲取http://t.cn/A6Zvjdun 如何破解iphone登陸密碼 今天看了一篇關於如何破解iphone ...
  • 值多態是一種介於傳統多態與類型擦除之間的多態實現方式,借鑒了值語義,保留了繼承,在單繼承的適用範圍內,程式和程式員都能從中受益。 ...
  • 泛型數組列表 為什麼要使用泛型數組列表 使用常規數組,界限固定,不易擴展。 int[]nums =new int[size]; 這個數組的長度固定為了size的大小。但如果使用數組列表就可以自動開闢空間,存放元素。 泛型數組列表ArrayList的定義 1.無參的 ArrayList integer ...
  • [toc] 1、分析網頁 當我們去爬取網頁時,首先要做的就是先分析網頁結構,然後就會發現相應的規律,如下所示: 生成鏈接:從網頁鏈接的規律中可得寫一個for迴圈即可生成它的鏈接,其中它的間隔為25,程式如下: 得到的結果如下: 2、請求伺服器 在爬取網頁之前,我們要向伺服器發出請求 2.1導入包 沒 ...
  • 前言 文的文字及圖片來源於網路,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯繫我們以作處理。 PS:如有需要Python學習資料的小伙伴可以加點擊下方鏈接自行獲取http://t.cn/A6Zvjdun 最近找工作,爬蟲面試的一個面試題。涉及的反爬還是比較全面的,結果公 ...
  • 數據分析當中讀取本地數據,txt,excel,csv,json,SQLite,SqLite_json等數據類型 ...
  • 大家在學習java多線程的時候肯定會遇到這個問題,而且在面試的時候也可能會談到java多線程這一塊的知識。今天我們就來看看這個東西~~~ synchronized 這個是對類實例進行加鎖,可以簡稱為“實例鎖”或者是“對象鎖”。當某個線程調用synchronized方法的時候,就會給它加上了一個鎖,其 ...
  • 我的LeetCode:https://leetcode cn.com/u/ituring/ 我的LeetCode刷題源碼[GitHub]:https://github.com/izhoujie/Algorithmcii LeetCode 542. 01 矩陣 題目 給定一個由 0 和 1 組成的矩陣 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...