码迷,mamicode.com
首页 > 其他好文 > 详细

递归练习

时间:2015-02-25 21:11:05      阅读:136      评论:0      收藏:0      [点我收藏+]

标签:递归   文件夹   

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-
在使用递归时要注意:
1.限定条件
2.要注意递归的次数,尽量避免内存溢出。

练习一:递归列出目录下的文件或者文件夹,包含子目录中的内容,要求带层次列出。
分析:
因为目录中还有目录,所以只要使用同一个列出目录功能的函数完成即可。如果在列出过程中出现的还是目录的话,还可以再次调用本功能,也即是函数自身调用自身,这种编程方式称为递归。

package OtherIO;
import java.io.File;
public class ListFile {
    public static void main(String[] args) {
        File file = new File("E:\\WorkSpace");
        showDir(file,0);
    }
    public static void showDir(File dir,int level){
        System.out.println(getLevel(level)+dir.getName());
        level++;
        File[] files = dir.listFiles();
        for(int x=0; x<files.length; x++){
            if(files[x].isDirectory()){
                showDir(files[x],level);
            }else{
                System.out.println(getLevel(level)+files[x]);
            }
        }
    } 
    public static String getLevel(int level){
        StringBuilder sb = new StringBuilder();
        sb.append("|--");
        for(int x=0; x<level; x++){
            sb.insert(0, " ");
        }
        return sb.toString();
    }
}

练习二:删除一个带内容的目录。
删除原理:
在windows中,删除目录是从里往外删除的,既然是从里往外删除,就要用到递归。

package OtherIO;
import java.io.File;
public class RemoveDir {
    public static void main(String[] args) {
        File file = new File("D:WorkSpace");
        removeDir(file);
    }
    public static void removeDir(File dir){
        File[] files = dir.listFiles();
        for(int x=0; x<files.length; x++){
            if(files[x].isDirectory()&&!files[x].isHidden()){
                removeDir(files[x]);
            }else{
                files[x].delete();
            }
        }
        dir.delete();
    }
}

练习三:将一个指定目录下的java文件的绝对路径,存储到一个文本文件中,即建立一个java列表文件。
思路:
1.对指定的目录进行递归。
2.获取递归过程中所有的java文件的路径。
3.将这些路径存储到集合中。
4.将集合中的数据写入到一个文件中。

package OtherIO;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class ShowJavaFileList {
    public static void main(String[] args) {
        File dir = new File("E:\\WorkSpace");
        List<File> list = new ArrayList<File>();
        List<File> list1 = fileToList(dir,list);
        File file = new File(dir,"javalist.txt");
        writeToFile(list1, file.toString());
    }
    public static List<File> fileToList(File dir,List<File> list){
        File[] files = dir.listFiles();
        for(File file :files){
            if(file.isDirectory()){
                fileToList(file,list);
            }else{
                if(file.getName().endsWith(".java"))
                list.add(file);
            }
        }
        return list;
    }
    public static void writeToFile(List<File> list,String listFile){
        BufferedWriter bufw = null;
        try {
            bufw = new BufferedWriter(new FileWriter(listFile));
            for(File file: list){
                String path = file.getAbsolutePath();
                bufw.write(path);
                bufw.newLine();
                bufw.flush();
            }
        } catch (IOException e) {
            throw new RuntimeException();
        }finally{
                try {
                    if(bufw!=null)
                    bufw.close();
                } catch (IOException e) {
                    throw new RuntimeException();
                }
        }

    }
}

递归练习

标签:递归   文件夹   

原文地址:http://blog.csdn.net/yuluoqianmu/article/details/43940163

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!