模拟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");
}
}

效果如下

原文地址:https://www.cnblogs.com/ll-hb/p/12687358.html

时间: 2024-11-08 19:58:52

模拟CMD操作文件(夹)的相关文章

操作文件夹,删除所有空文件夹

操作文件夹,删除所有空文件夹,首要条件是判断文件是否来空.即是说文件夹是存在的,没有文件存在的即为空. 整个方法中,使用迭代循环时行扫描所有目录和子目录. public static void RemoveAllEmptyDirectories(string physicalPath) { foreach (var directory in Directory.GetDirectories(physicalPath)) { RemoveAllEmptyDirectories(directory)

Directory 操作文件夹类

1.Directory 操作文件夹 CreateDirectory 创建文件夹 Delete  删除文件夹 Move  剪切文件夹 Exist  判断是否存在 GetFiles 获得指定的目录下所有文件的全路径 GetDirectory 获得指定目录下所有文件夹的全路径 2.WebBrowser浏览器控件 url 3.ComboBox下拉框控件 DropDownStyle:控制下拉框的外观样式 名字:cbo+.... 案例:日期选择器 4.点击更换图片 1).在程序加载的时候,将指定图片文件夹中

FileSystemObject操作文件夹

涉及到文件夹的操作包括创建.移动.删除以及获取相关属性. 例:获取父文件夹名称.创建文件夹.删除文件夹.判断是否为根目录 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <TITLE> New Document </TITLE> <script language="javascript">

Python操作文件夹

python对文件夹的操作汇总,方便查阅使用 1.遍历指定目录,显示目录下的所有文件名 #-*- coding:utf-8 -*- import os def fileInFolder(filepath): pathDir = os.listdir(filepath) # 获取filepath文件夹下的所有的文件 files = [] for allDir in pathDir: child = os.path.join('%s\\%s' % (filepath, allDir)) files.

背水一战 Windows 10 (88) - 文件系统: 操作文件夹和文件

[源码下载] 作者:webabcd 介绍背水一战 Windows 10 之 文件系统 创建文件夹,重命名文件夹,删除文件夹,在指定的文件夹中创建文件 创建文件,复制文件,移动文件,重命名文件,删除文件 打开文件,获取指定的本地 uri 的文件,通过 StreamedFileDataRequest 或远程 uri 创建文件或替换文件 示例1.演示如何创建文件夹,重命名文件夹,删除文件夹,在指定的文件夹中创建文件FileSystem/FolderOperation.xaml <Page x:Clas

linux创建用户并赋予用户操作文件夹权限

创建用户 root用户登陆 cd /home 切换到home目录 ls查看现有用户 useradd xxx 添加用户名 passwd xxx 为用户添加密码 2.给用户赋予操作某文件夹的权限 在root用户登录的情况,赋予opt目录给liuhai这个用户权限 示例代码: # 将目录/opt 及其下面的所有文件.子目录的owner用户改成 liuhai chown -R liuhai:liuhai /opt #给目录opt设置权限 chmod 760 /opt 备注: r表示可读--4分,w表示可

CMD递归文件夹

SET dir=%~dp0 SET /a cnt=0 echo dir is: %dir% cd /d %dir% for /R %dir% %%i in (*.apk) do ( set /a cnt=cnt+1 echo %%~nxi>>1.txt ) echo %cnt% pause 以上的目的是在WINDOWS下去递归遍历一个文件夹(包括子文件夹),找出有多少个apk文件,输出数量,且把apk的文件名放在1.txt中

ubuntu 下操作文件夹,出现Permission denied的解决的方法

今天遇到个诡异问题,向一个文件夹(myResources)粘贴文件的时候,出现这样一个提示 Permission denied 是权限没设好,仅仅是拷贝粘贴一个文件,怎么会这样? 解决的办法: $ sudo chmod -R 777 myResources 当中 -R 是指级联应用到文件夹里的全部子文件夹和文件 777 是全部用户都拥有最高权限

01-资料管理器(Directory/DirectoryInfo操作文件夹类)

public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { DirectoryInfo demoDir = new DirectoryInfo("demo");//获取demo目录 DirectoryInfo[] direInfo = demoDir.GetDirectories();