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