------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! ----

来源:互联网 发布:淘宝直播营销策划书 编辑:程序博客网 时间:2024/04/26 08:28

黑马程序员      File类、递归

File

用来将文件或者文件夹封闭成对象。方便对文件与文件夹的属性信息进行操作。File对象可以作为参数传递给流的构造函数。

流只能操作数据,如果要操作文件的信息就必须要用File类。

构造方法

//将文件封装成对象,可以将已有的和未出现的文件或文件夹封装成对象。

File f = new File(“文件夹及文件路径”);

 

//

File f = new File(“文件目录,“文件名”);

 

//

File d = new File(“c:\\abc”);

File f = new File(d,”c.txt”);

 

属性和方法

File.separator:目录分隔符

 

常见方法:

    创建

     boolean createNewFile():在指定的位置创建文件,如果该文件已经存在,则不创建。返回false。和输出流不一样,输出流对象一建立就会创建文件,而且文件已经存在后,会覆盖。

     createTempFile():创建临时文件

     boolean mkdir():创建文件夹。只能创建一级目录

     boolean mkdirs():创建多级文件夹

    删除

     boolean delete():删除失败返回false

     void deleteOnExit():在程序退出时删除指定文件。

    判断

     boolean canExecute():判断文件及路径可否执行

     canRead():判断文件是否可读

     canWrite():判断文件是否可写

     comparTo():排序

     boolean exists():文件是否存在

      boolean isDirectory():判断是否是文件夹。

     boolean isFile():判断是否是文件

//记住:在判断文件对象是否是文件或者是目录时,必须要先判断该文件对象封闭的内容是否存在。通过exists判断。

     isAbsolutePath():是否是绝对路径

    获取信息

     String getName():获取名称

     String getPath():获取路径

     String getParent():返回的是绝对路径中的文件父目录。如果获取的是相对路径,返回null。如果相对路径有上一层目录,那么这个目录就是返回结果。

     String AbsolutePath():获取绝对路径

     File AbsoluteFile():获取绝对路径,将返回封装成file对象。

      long lastModified():获取最后一次修改的时间

     long length():获取文件大小

     renameTo():更改文件名,也可修改路径

      File[] listRootsDemo():返回盘符

      String[] list(FilenameFilterfileFilter):返回目录下的文件及目录的列表。如果不是目录的话,返回的是null.  如有参数,为文件名过滤器。

例:

File dir = new File(“d:\\aaa\\bb”) ;

String[] arr = dir.list(new FilenameFilter()){

        public booleanaccept(File dir ,String name){

               returnname.endsWith(“.bmp”);

}

}

     File[] listFiles():返回文件夹下所有文件及文件夹的对象

 

实例:

列出指定目录下文件或者文件夹,包含子目录中的内容。也就是说列出指定目录下的所有内容。

递归:函数自身调用自身,

递归要注意:1.  限定条件                2.     要注意递归的次数,避免内存溢出。

class FileDemo{

        public static voidmain(String[] args){

               File dir =new File(“c:\\”);

               showDir(dir);

}

 

public static void showDir(file dir){

       System.out.println(dir);

       file[]files = dir.listFiles();

       for(intx=0;x<files.length;x++){

              if(files[x].isDirectory())

                     showDir(files[x]);

              else

                     System.out.println(files[x]);

}

}

}

 

------------------

带层次

public static String getLevel(int level){
  
  StringBuffer sb = new StringBuffer();
  
  for(int x=0;x<level;x++){
   
   sb.append("--");
  }
  return sb.toString();
 }
 
 public static void show(File file,int level){  
  System.out.println(getLevel(level)+file.getName());
  level++;
  File[] filetmp = file.listFiles();
 for(int x=0;x<filetmp.length;x++){ 
   if(filetmp[x].isDirectory()){
   show(filetmp[x],level);
   }else{
    System.out.println(getLevel(level)+filetmp[x]);
   }
  }
 }

 

       实例2   删除一个带内容的目录

       删除原理:

       widow中,删除目录从里面往外删除。既然是从里往外删,就需要用到递归。

      

       public static void removeFile(File file){  
        System.out.println(file);  
        File[] dir = file.listFiles();  
        for(int x=0;x<dir.length;x++){
                if(dir[x].isDirectory())
                 removeFile(dir[x]);
                else
                 dir[x].delete();
          }  
             file.delete();
        }


0 0