模擬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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...