多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
在函数内部,调用自身方法的形式称之为递归。 递归注意的事项: 1、递归的约束条件 2、递归的调用次数,防止内存溢出 ~~~ import java.io.*; public class DiguiDemo{ public static void main(String args[]){ //File f = new File("F:/JavaOracle/OOP"); //System.out.println("-----"); //getlistFiles(f,0); // toBin(6); //System.out.println("求和:"+getSum(10)); File f = new File("F:/JavaOracle/ABCD"); // File []files = f.listFiles(); // System.out.println("00000--"+files.length); DeleteFiles(f); } /** 删除指定文件夹中的所用文件。 从里到外一次删除所有文件 思路: 1、首先遍历这个文件夹,如果是文件的话就删除,若不是则继续递归遍历 */ public static void DeleteFiles(File dir){ File []files = dir.listFiles(); System.out.println(files.length+"---"); for(File f :files){ if(f.isDirectory()){ DeleteFiles(f); }else{ System.out.println(f.getName()+"--file--"+f.delete()); } } System.out.println(dir+"**dir**"+dir.delete()); } //设置一个层级目录,表示第几层 public static String getLevel(int level){ StringBuffer sb = new StringBuffer(); sb.append("|--"); for(int i=0;i<level;i++){ sb.insert(0," "); } return sb.toString(); } //运用递归的方法,返回指定目录中所有的文件、及文件夹 public static void getlistFiles(File dir,int level){ System.out.println(dir); level++; //第n次调用,说明是第level+n层 File files[] = dir.listFiles(); for(int i=0;i<files.length;i++){ if(files[i].isDirectory()){ getlistFiles(files[i],level); }else{ System.out.println(getLevel(level)+files[i]); } } } //运用递归的方法,进行十进制转换成二进制 public static void toBin(int a){ if(a>0) toBin(a/2); System.out.print(a%2); } //运用递归方法,进行求和 public static int getSum(int a){ if(a==1) return 1; return a+getSum(a-1); } } ~~~ FileList.java ~~~ /** 实例:获取指定的文件夹中所有.java文件的绝对路径,并存储到txt文件中。 步骤: 1、递归调用指定文件夹中的文件,获取满足要求的文件的绝对路径 2、将获取的绝对路径存储到list集合中。作为缓存。 3、将list集合中的路径,存储到指定的文件中。 */ import java.util.*; import java.io.*; public class FileList{ public static void main(String args[]){ File f = new File("F:\\JavaOracle"); List<File> list = new ArrayList<File>(); fileToList(f,list); System.out.println(list.size()); writeToFile("F:\\fileList.txt",list); } //将指定文件夹中满足要求的文件存储到list集合中 public static void fileToList(File f,List<File> list){ File []files = f.listFiles(); for(File file : files){ //若是文件夹,则递归调用该方法。若不是则判断是.java文件。并存储到list集合中 if(file.isDirectory()) fileToList(file,list); else{ if(file.getName().endsWith(".java")){ //getAbsoluteFile()获得绝对路径,返回File类型 list.add(file.getAbsoluteFile()); } } } } //将list中的清单写入到指定的文件中去 public static void writeToFile(String path,List<File> list){ //这里只需要调用写入操作就行了。用BufferedWriter进行缓存 BufferedWriter bufw = null; try{ bufw = new BufferedWriter(new FileWriter(path)); for(File absoluteFile : list){ bufw.write(absoluteFile.toString()); bufw.newLine(); bufw.flush(); } }catch(IOException e){ //e.printStratack(); System.out.println("文件写入异常"); }finally{ try{ if(bufw!=null) bufw.close(); }catch(IOException e){ System.out.println("未关闭异常"); } } } } ~~~