题目:
编写一个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());
- }
- }
- }
- }