Java 控制台下显示文件结构

题目:

 编写一个Java应用程序,文件名为Folder.java,编译后执行结果如下图所示,实现指定文件夹下目录和文件的文本形式的树状结构显示。要求:
1. 输入: java Folder,显示当前文件夹下的目录和文件的文本形式树状显示;
2. 输入: java Folder C:\test>,显示C:\test文件夹下的目录和文件的文本形式树状显示;(C:\test可以为任意文件夹路径名)
3. 输入: java Folder add aa,在当前文件夹下面添加一个子目录(子目录名为:aa),同时显示当前文件夹下的最新目录和文件的文本—|形式树状显示;
4. 输入: java Folder del aa,在当前文件夹下面删除一个子目录(子目录名为:aa),同时显示当前文件夹下的最新目录和文件的文本形式树状显示;(30分)
 

 

这一题最重要的部分应该是的道当前类class文件所在的目录,和 显示出目录的树状结构。

因为当前类目录 是不变的,所以可以将其生命常量

static final File CURR_FILE = new File(Folder.class.getResource("/").getPath());//当前文件目录

 

树状结构可以用深度优先来实现,同时要注意缩进,在我的代码中没深入一层缩进加两个空格。

但是最后运行的效果和上面的还是有点不同,主要在树的边上面。

 

我将生成的文件放入System32中,然后希望在控制台中直接可以运行,这个要如何实现呢,通过批出理文件来写吗,可我的批处理文件只能在System32目录中能运行,在其他的目录中就报java.lang.ClassNotFoundException: Folder

希望有高手能提供解决方法。谢谢

我的批处理文件

set PATH C:\WINDOWS\system32
java Folder %1

代码:

import java.io.File;

public class Folder {
	enum Commands{SHOW,ADD,DEL}//命令参数
	static final File CURR_FILE = new File(Folder.class.getResource("/").getPath());//当前文件目录
	public static void main(String[] args) {
		int len = args.length;
		String command;
		switch (len) {
		case 0:
			command = null;
			execute(command,Commands.SHOW);
			break;
		case 1:	
			command = args[0];
			execute(command,Commands.SHOW);
			break;
		case 2:
			Commands commandType = null;
			if(args[0].toLowerCase().equals("add")){
				commandType = Commands.ADD;
			}else if(args[0].toLowerCase().equals("del")){
				commandType = Commands.DEL;
			}else{
				System.out.println("无此方法");
				break;
			}
			execute(args[1], commandType);
			break;
		default:
			break;
		}
	}
	private static void execute(String command, Commands type) {
		switch (type) {
		case SHOW:
			File file;
			if(command == null){//显示当前目录
				file = CURR_FILE;
			}else{
				file = new File(command);
			}
			show(1,file);
			break;
		case ADD:
			file = new File(CURR_FILE,command);//在当前目录下新建一个文件
			file.mkdir();
			show(1, CURR_FILE);
			break;
		case DEL:
			file = new File(CURR_FILE,command);
			file.delete();
			show(1, CURR_FILE);
			break;
		default:
			break;
		}
	}
	private static void show(int space,File...files) {
		StringBuffer  spaceStr = new StringBuffer("");
		for(int i = 1; i <space; i++){
			spaceStr.append(" ");
		}
		if(space != 1){//如果不是显示根目录,这要有树的边
			spaceStr.append("|——");
		}
		for(File file : files){
			System.out.println(spaceStr.toString() + file.getName());
			if(file.isDirectory()){
				show(space + 2,file.listFiles());
			}
		}
		
	}

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值