黑马程序员-递归

----------------------ASP.Net+Android+IOS开发.Net培训、期待与您交流! ---------------------- 

/*

列出指定目录下文件或文件夹,包含子目录中的内容

也就是列出指定目录下所有内容

 

因为目录中还有目录,只要使用同一个列出目录功能的函数完成即可

在列出过程中出现的还是目录的话,可以再次调用本功能。

也就是函数自身调用自身

这种表现形式,或者编程手法,称为递归

 

递归要注意:

1.限定条件

2.要注意递归的次数,尽量避免内存溢出

*/

import java.io.*;

class FileDemo3

{

       public static voidmain(String[] args)

       {

              //showDir(newFile("D:\\java0217"));

              toBin(6);

       }

       public static void toBin(int num)

       {

              /*

              while(num>0)

              {

                     System.out.println(num%2);

                     num/=2;

              }*/

              if(num>0)

              {

                     toBin(num/2);

                     System.out.print(num%2);

              }

       }

 

       public static boolean showDir(File dir)

       {

              if(!dir.exists())

                     returnfalse;

              System.out.println(dir);

              File[]names=dir.listFiles();

              for(Filename:names)

              {

                     if(name.isDirectory())

                            showDir(name);

                     else

                            System.out.println(name+"..."+name.length());

              }

              return true;

       }

}


 

带层级目录

import java.io.*;

class FileDemo3

{

       public static voidmain(String[] args)

       {

              showDir(newFile("D:\\java0217"),0);

       }

       public static StringgetLevel(int level)

       {

              StringBuildersb=new StringBuilder();

              for(intx=0;x<level;x++)

              {

                     sb.append("  ");

              }

              returnsb.toString();

       }

       public static booleanshowDir(File dir,int level)

       {

              if(!dir.exists())

                     returnfalse;

              System.out.println(getLevel(level)+dir);

              level++;

              File[]names=dir.listFiles();

              for(Filename:names)

              {

                     if(name.isDirectory())

                            showDir(name,level);

                     else

                            System.out.println(getLevel(level)+name+"..."+name.length());

              }

              return true;

       }

}


 

 

 

/*

删除一个带内容的目录

删除原理

在windows中,删除目录从里面住外删除的

 

既然是从里住外删除,就需要用到递归

*/

import java.io.*;

class RemoveDir 

{

       public static voidmain(String[] args)

       {

              removeDir(newFile("D:\\1"));

       }

       public static boolean removeDir(File dir)

       {

              if(!dir.exists())

                     returnfalse;

              File[]files=dir.listFiles();

              for(Filefile:files)

              {

                     if(file.isDirectory())

                            removeDir(file);

                     else

                            System.out.println(file+"...file..."+file.delete());

              }

              System.out.println(dir+"...dir..."+dir.delete());

              return true;

       }

}


 

**************************************************************************************

 

/*

练习

将一个指定目录下的java文件的绝对路径,存储到一个文本文件中

建立一个java文件列表清单文件

 

思路:

1.对指定目录进行递归

2.在递归过程中获取java文件绝对路径

3.将这些路径存储到集合中

4.将集合中的数据写入到一个文件中

*/

import java.io.*;

import java.util.*;

class JavaFileList 

{

       public static void main(String[] args)

       {

              File dir=newFile("D:\\java0217");

              List<File>list=new ArrayList<File>();

              fileToList(dir,list);

              System.out.println(list.size());

              File file=newFile(dir,"javalist.txt");

              listToFile(list,file.toString());

       }

       public static void fileToList(File dir,List<File> list)

       {

              if(!dir.exists())

                     throw newRuntimeException("目录为空");

              File[]files=dir.listFiles();

              for(Filefile:files)

              {

                     if(file.isDirectory())

                            fileToList(file,list);

                     else

                     {

                            if(file.getName().endsWith(".java"))

                                   list.add(file);

                     }

              }

       }

       public static void listToFile(List<File> list,String javaListFile)

       {

              BufferedWriterbufw=null;

              try

              {

                     bufw=newBufferedWriter(new FileWriter(javaListFile));

                     for(Filefile:list)

                     {

                            bufw.write(file.getAbsolutePath());

                            bufw.newLine();

                            bufw.flush();

                     }

              }

              catch(IOException e)

              {

                     throw newRuntimeException("写入失败");

              }

              finally

              {

                     try

                     {

                            if(bufw!=null)

                                   bufw.close();

                     }

                     catch(IOException e)

                     {

                            thrownew RuntimeException("写入关闭失败");

                     }

              }

       }

}


 

----------------------ASP.Net+Android+IOS开发.Net培训、期待与您交流! ---------------------- 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值