递归练习
来源:互联网 发布:库里2016总决赛数据 编辑:程序博客网 时间:2024/05/29 11:44
在使用递归时要注意:
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(); } } }}
0 0