当前位置:   article > 正文

一道关于目录的编程题_编写一个静态方法,用于实现对给定路径的文件夹(包括文件夹中的内容)**剪切[移动]*

编写一个静态方法,用于实现对给定路径的文件夹(包括文件夹中的内容)**剪切[移动]*

最近,上网搜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),同时显示当前文件夹下的最新目录和文件的文本形式树状显示;

觉得这道题提有难度的,本来想看看答案,找了半天也没有,最后自己尝试把它写了出来,基本上实现了题目要求。不过可能代码质量不怎么样,请多多包涵!

Code:
  1. import java.io.File;    
  2. import java.io.IOException;   
  3. import java.util.ArrayList;   
  4. import java.util.List;   
  5.   
  6. public class Folder {   
  7.     public Folder(String title) {   
  8.         this.title = title;   
  9.     }   
  10.   
  11.     private String title;   
  12.   
  13.     private List children = new ArrayList();   
  14.   
  15.     public void addChild(Folder f) {   
  16.         children.add(f);   
  17.     }   
  18.   
  19.     public String getString(String lftStr, String append) {//递归   
  20.         StringBuilder b = new StringBuilder();   
  21.         b.append(append + title);   
  22.         b.append("/n");   
  23.         if (children.size() > 0) {   
  24.             for (int i = 0; i < children.size() - 1; i++) {   
  25.                 b.append(lftStr + ((Folder) children.get(i)).getString(lftStr + "│""├"));   
  26.             }   
  27.             b.append(lftStr + ((Folder) children.get(children.size() - 1)).getString(lftStr + " ","└"));   
  28.         }   
  29.         return b.toString();   
  30.     }   
  31.        
  32.     public static void main(String[] args) {   
  33.            
  34.         File file = new File(".//");//大前提,file为当前文件   
  35.         String currentPath = null;//当前目录   
  36.         try {   
  37.             currentPath =new String(file.getCanonicalPath());   
  38.         } catch (IOException e) {   
  39.             e.printStackTrace();   
  40.         }   
  41.            
  42.         if(args.length == 0){          
  43.             /*  
  44.              * 1. 输入: java Folder,显示当前文件夹下的目录和文件的文本形式树状显示;  
  45.              */            
  46.             Folder root = new Folder(currentPath.substring(currentPath.lastIndexOf("//") +1 ));//依据当前目录获得根文件   
  47.             Tool.createTree(file.listFiles(), root);//生成一颗树   
  48.             System.out.println(root.getString(" """));//打印树   
  49.   
  50.         }else if(args.length == 1){   
  51.             /*  
  52.              * 2. 输入: java Folder C:/test>,显示C:/test文件夹下的目录和文件的文本形式树状显示;  
  53.              * (C:/test可以为任意文件夹路径名)  
  54.              */  
  55.             file = new File(args[0]);   
  56.             Folder root = new Folder(args[0].substring(args[0].lastIndexOf("//") +1));//依据args[]获得根文件   
  57.             Tool.createTree(file.listFiles(), root);   
  58.             System.out.println(root.getString(" """));   
  59.         }else if(args.length == 2){   
  60.                
  61.             if(args[0].equals("add")){   
  62.                 /*  
  63.                  * 3. 输入: java Folder add aa,在当前文件夹下面添加一个子目录(子目录名为:aa),  
  64.                  * 同时显示当前文件夹下的最新目录和文件的文本形式树状显示;  
  65.                  */  
  66.                 //file = new File(".//");   
  67.                 File addFile = new File(file,args[1]);   
  68.                 boolean flag = false;   
  69.                 if(addFile.isDirectory()){//是目录,就make   
  70.                     flag = addFile.mkdir();   
  71.                 }else if(addFile.isFile()){//文件,就create   
  72.                     try {   
  73.                         flag = addFile.createNewFile();   
  74.                     } catch (IOException e) {   
  75.                         e.printStackTrace();   
  76.                     }   
  77.                 }   
  78.                 if(flag){   
  79.                     System.out.println("添加成功!");   
  80.                 }else{   
  81.                     System.out.println("添加失败!");   
  82.                 }   
  83.                 Folder root = new Folder("Tree");   
  84.                 Tool.createTree(file.listFiles(), root);//生成一颗树   
  85.                 System.out.println(root.getString(" """));//打印树   
  86.                    
  87.             }else if(args[0].equals("del")){   
  88.                 /*  
  89.                  *  4. 输入: java Folder del aa,在当前文件夹下面删除一个子目录(子目录名为:aa),  
  90.                  *  同时显示当前文件夹下的最新目录和文件的文本形式树状显示  
  91.                  */  
  92.                 //file = new File(".//");   
  93.                 File delFile = new File(file,args[1]);   
  94.                 if(delFile.delete()){ //删除文件   
  95.                     System.out.println("删除成功!");   
  96.                 }else{   
  97.                     System.out.println("删除失败!");   
  98.                 }   
  99.                 Folder root = new Folder("Tree");   
  100.                 Tool.createTree(file.listFiles(), root);//生成一颗树   
  101.                 System.out.println(root.getString(" """));//打印树   
  102.             }else{   
  103.                 System.out.println("输入命令无效!");   
  104.             }   
  105.         }   
  106.     }   
  107. }   
  108. class Tool{//工具类   
  109.   
  110.     public static void createTree(File []files,Folder lastFolder){//递归   
  111.         for(int i=0;i<files.length;i++){   
  112.             int index=files[i].toString().lastIndexOf('//');   
  113.             Folder temFolder = new Folder(files[i].toString().substring(index+1));   
  114.             if(files[i].isDirectory()){ //是目录,加入然后继续递归   
  115.                 lastFolder.addChild(temFolder);   
  116.                 Tool.createTree(files[i].listFiles(),temFolder);   
  117.             }else{             
  118.                 lastFolder.addChild(temFolder);//不是则只加入   
  119.             }   
  120.         }          
  121.     }   
  122. }  

 

 

 

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号