Java代码简单模仿DOS系统

使用java的File类和IO流简单模仿DOS系统的部分操作

具体功能如图所示:

public class MainView {
    private static BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
    public static void main(String[] args) throws IOException {
        FileHelper helper = FileHelper.getInstance();
        System.out.println("-------------------------------------------------------");
        System.out.println("-                  java 模仿doc简易系统                 -");
        System.out.println("- dir 显示当前目录下所有内容                              -");
        System.out.println("- cd 目录名称/ ..  进入到子目录或者返回父级目录              -");
        System.out.println("- mkdir 目录名称  创建目录                               -");
        System.out.println("- createFile 文件名称  创建文件                          -");
        System.out.println("- rename 原文件名 新文件名  修改文件或者目录名称             -");
        System.out.println("- search 文件名 搜索文件名中包含关键字的文件                -");
        System.out.println("- del 目录/文件名称   删除文件夹或者文件                   -");
        System.out.println("- copy 文件/目录名称 目标路径 复制文件或者目录              -");
        System.out.println("- open 文件名称 打开文本文件                             -");
        System.out.println("- update 文件名称 是否追加 具体内容  修改文件内容           -");
        System.out.println("- exit 退出系统                                        -");
        System.out.println("-------------------------------------------------------");
        System.out.println();
        while(true){
            System.out.print(helper.getPath() + "  ");
            String command = reader.readLine();
            String[] cmds = command.split(" ");
            if("dir".equalsIgnoreCase(cmds[0])){
                helper.dir();
            }else if("cd".equalsIgnoreCase(cmds[0])){
                helper.cd(cmds[1]);
            }else if("mkdir".equalsIgnoreCase(cmds[0])){
                helper.mkdir(cmds[1]);
            }else if("createFile".equalsIgnoreCase(cmds[0])){
                helper.createFile(cmds[1]);
            }else if("rename".equalsIgnoreCase(cmds[0])){
                helper.rename(cmds[1],cmds[2]);
            }else if("del".equalsIgnoreCase(cmds[0])){
                helper.del(cmds[1]);
            }else if("open".equalsIgnoreCase(cmds[0])){
                helper.open(cmds[1]);
            }else if("copy".equalsIgnoreCase(cmds[0])){
                helper.copy(cmds[1],cmds[2]);
            }else if("search".equalsIgnoreCase(cmds[0])){
                helper.search(cmds[1]);
            }else if("update".equalsIgnoreCase(cmds[0])){
                helper.update(cmds[1],Boolean.parseBoolean(cmds[2]),cmds[3]);
            }else if("exit".equalsIgnoreCase(cmds[0])){
                helper.exit();
            }
        }
    }
}
  • dir 命令可以查看当前目录下所有的内容如下图所示:

       

dir 部分实现代码

/**
 * 显示当前目录下的所有子项
 */
public void dir() {
	int fileCount = 0, dirCount = 0;
	File[] files = currentFile.listFiles();
	System.out.println("最后修改时间\t\t\t\t类型\t\t\t\t大小\t\t\t名称");
	for (File file : files) {
		if (!file.isHidden()) {
			String time = new SimpleDateFormat("yyyy-MM-dd HH:mm").format(file.lastModified());
			String name = file.getName();
			String type = "文件";
			String len = "";
			if (file.isDirectory()) {
				dirCount++;
				type = "文件夹";
				len = file.list().length + "项";
			} else if (file.isFile()) {
				fileCount++;
				len = checkSize(file.length());
			}
			System.out.println(time + "\t\t" + type + "\t\t\t" + len + "\t\t\t" + name);
		}
	}
	System.out.println(fileCount + " 个文件");
	System.out.println(dirCount + " 个文件夹");
}
  • cd 命令 ,进入到子目录或者返回上级目录

public void cd(String name) {
	if ("..".equalsIgnoreCase(name)) {
		if (!currentFile.getAbsolutePath().equalsIgnoreCase(ROOT_PATH)) {
			currentFile = currentFile.getParentFile();
		}
	} else {
		File file = new File(currentFile, name);
		if (!file.exists() || !file.isDirectory()) {
			System.out.println("错误:" + name + "不存在或者不是一个目录");
			return;
		}
		currentFile = file;
	}
}
  • mkdir 创建目录
  • createFile 创建文件
  • search 通过递归算法,可以模糊搜索带有指定关键字的文件名称,显示出来
  • del 可以删除目录或者文件,通过递归算法删除
private  void delFile(File file){
	File[] files = file.listFiles();
	for (File f1 : files) {
		if (!f1.isFile() && f1.list().length != 0) {
			delFile(f1);
		}
		f1.delete();
	}
	file.delete();
}
  • copy 可以复制文件或者目录,复制目录通过递归算法
/**
 * 复制文件或者目录
 * @param source
 * @param target
 * @throws IOException
 */
public void copy(String source,String target) throws IOException {

	File sourceFile = new File(source);
	if (!sourceFile.exists()){
		System.out.println("错误:源文件不存在");
		return;
	}
	File targetFile = new File(target,sourceFile.getName());
	if (targetFile.exists()){
		System.out.println("错误:目标路径中包含"+sourceFile.getName() +"文件或者目录");
		return;
	}
	if (sourceFile.isFile()){
		copyFile(sourceFile,targetFile);
	}else if(sourceFile.isDirectory()){
		copyDir(sourceFile,targetFile);
	}
}
  • open 通过IO流将指定的文件内容读取出来
  • update 更新文件内容

代码仅供参考,具体代码点击下载

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值