Java 控制台下显示文件结构

来源:互联网 发布:平价香水 知乎 编辑:程序博客网 时间:2024/06/12 01:52

题目:

 编写一个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文件所在的目录,和 显示出目录的树状结构。

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

Java代码  收藏代码
  1. 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

代码:

Java代码  收藏代码
  1. import java.io.File;  
  2.   
  3. public class Folder {  
  4.     enum Commands{SHOW,ADD,DEL}//命令参数  
  5.     static final File CURR_FILE = new File(Folder.class.getResource("/").getPath());//当前文件目录  
  6.     public static void main(String[] args) {  
  7.         int len = args.length;  
  8.         String command;  
  9.         switch (len) {  
  10.         case 0:  
  11.             command = null;  
  12.             execute(command,Commands.SHOW);  
  13.             break;  
  14.         case 1:   
  15.             command = args[0];  
  16.             execute(command,Commands.SHOW);  
  17.             break;  
  18.         case 2:  
  19.             Commands commandType = null;  
  20.             if(args[0].toLowerCase().equals("add")){  
  21.                 commandType = Commands.ADD;  
  22.             }else if(args[0].toLowerCase().equals("del")){  
  23.                 commandType = Commands.DEL;  
  24.             }else{  
  25.                 System.out.println("无此方法");  
  26.                 break;  
  27.             }  
  28.             execute(args[1], commandType);  
  29.             break;  
  30.         default:  
  31.             break;  
  32.         }  
  33.     }  
  34.     private static void execute(String command, Commands type) {  
  35.         switch (type) {  
  36.         case SHOW:  
  37.             File file;  
  38.             if(command == null){//显示当前目录  
  39.                 file = CURR_FILE;  
  40.             }else{  
  41.                 file = new File(command);  
  42.             }  
  43.             show(1,file);  
  44.             break;  
  45.         case ADD:  
  46.             file = new File(CURR_FILE,command);//在当前目录下新建一个文件  
  47.             file.mkdir();  
  48.             show(1, CURR_FILE);  
  49.             break;  
  50.         case DEL:  
  51.             file = new File(CURR_FILE,command);  
  52.             file.delete();  
  53.             show(1, CURR_FILE);  
  54.             break;  
  55.         default:  
  56.             break;  
  57.         }  
  58.     }  
  59.     private static void show(int space,File...files) {  
  60.         StringBuffer  spaceStr = new StringBuffer("");  
  61.         for(int i = 1; i <space; i++){  
  62.             spaceStr.append(" ");  
  63.         }  
  64.         if(space != 1){//如果不是显示根目录,这要有树的边  
  65.             spaceStr.append("|——");  
  66.         }  
  67.         for(File file : files){  
  68.             System.out.println(spaceStr.toString() + file.getName());  
  69.             if(file.isDirectory()){  
  70.                 show(space + 2,file.listFiles());  
  71.             }  
  72.         }  
  73.           
  74.     }  
  75.   

原创粉丝点击