File类,递归

Posted lzw123-

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了File类,递归相关的知识,希望对你有一定的参考价值。

File类

  File文件和目录路径名的抽象表示形式。即,Java中把文件或者目录(文件夹)都封装成File对象。

  File类包含
       路径    path E:...
       目录 directory 文件夹
       文件 file
File类的成员变量

技术分享图片

例子:

// 名称分隔符
System.out.println(File.pathSeparator);//win ;    linux :
// 路径分隔符
System.out.println(File.separator);//win        linux /

File类的构造方法

  技术分享图片

  File类构造方法不会检验文件是否存在

创建File对象

例子:

//1
File file=new File("e:\\test\\a.txt");
//2
File file=new File("e:","a.txt");//灵活性高,
//3
File f1=new File("d:\\test");
File file=new File(f1,"a.txt");//灵活性更高

File类的获取

技术分享图片

//获取绝对路径
    public static void method3(){
        //File file=new File("d:\\test\\a.txt");
        //File file=new File("src");
        File file=new File("abc");
        //相对路径走的是本工程路径
        System.out.println(file.getAbsolutePath());
    }
  public static void method4(){
        //获取本路径目录名或者文件名
        File file=new File("d:\\codetool\\jdk1.8.zip");
        System.out.println(file.getName());
        //getPath()和toString()一个作用
        System.out.println(file.getPath());
        //返回文件的长度long(字节数)检测空间大小,不是容量大小
        System.out.println(file.length());
    }

文件或文件夹的创建删除与测试

    public static void methd4() throws IOException{
        //创建文件,只能创建文件,不能创建文件夹
        File f1=new File("e:\\test\\c");
        System.out.println(f1.createNewFile());
    }
public static void methd5() throws IOException{
        //创建文件夹,只能创建文件夹,不能创建文件
        File f1=new File("e:\\test\\d");
        System.out.println(f1.mkdir());//单级目录,false
        File f2=new File("e:\\test\\d\\aaa.txt");
        System.out.println(f2.mkdirs());//多级目录,true
//        mkdirs创建多级目录
    }
    public static void method7(){
        //删除文件或文件夹
        //直接从硬盘上删除,不走回收站,
        //删除需谨慎

      //删除目录时,如果目录中有内容,无法直接删除。

      //只有将目录中的内容都删除后,保证该目录为空。这时这个目录才可以删除

      File file=new File("d:\\test\\aaa.txt");

boolean flag=file.delete();
        System.out.println(flag);
    }
    public static void methd7(){
        File f1=new File("e:\\test\\a.txt");
        System.out.println(f1.exists());//判断文件或文件夹是否存在
        //判断是否是文件
        System.out.println(f1.isFile());
        //判断是否是文件夹
        File f2=new File("e:\\test");
        System.out.println(f2.isDirectory());
        
    }

listFiles()方法

技术分享图片

例子:

public static void method9(){
        File file =new File("e:\\test");
        String[] files =file.list();//获取路径下所有的文件或者文件夹的字符串名称
        for(String s:files){
            File f1=new File(file,s);

            if(f1.getName().equals("a.txt")){
                f1.delete();
            }
            
        }
    }
    public static void method10(){
        File file =new File("e:\\test");
        File[] files =file.listFiles();
        for(File s:files){
            System.out.println(s);
        }
    }
    

结果演示:

e:	est.txt
e:	estc
e:	estc.TXT
e:	estd

注意: 在获取指定目录下的文件或者文件夹时必须满足下面两个条件

   1,指定的目录必须是存在的,

  2,指定的必须是目录。否则容易引发返回数组为null,出现NullPointerException

 文件过滤器

listFiles()方法,空参时,全部显示

有参数时,

技术分享图片

FileFilter实现此接口的实例就可过滤文件名

该接口有accept方法

技术分享图片

自定义类继承该接口

public class MyFilter implements FileFilter {

    
    public boolean accept(File pathname) {
        /*String name=pathname.getName().toLowerCase();//先转字符串,再转小写
        boolean flag=name.endsWith(".txt");//查找以什么结尾
        return flag;*/
        //如果是文件夹,则不过滤,加到File数组中    
        if(pathname.isDirectory()){                                                                   
            return true;
        }
        return pathname.getName().toLowerCase().endsWith(".xml");
    }
        
}

测试类:

public static void main(String[] args) {
    
        File file =new File("e:\\test");
        File[] files=file.listFiles(new MyFilter());
        //listFiles方法在获取路径时调用accept方法,并将路径传入,
        //如果该方法返回true,那么该文件对象放入File数组,如果是false,则不放入
        
        //遍历获取到的所有符合条件的文件
        for(File f:files){
            System.out.println(f);
        }
    }

递归   

递归,指在当前方法内调用自己的这种现象

如:

public void method(){
    System.out.println(“递归的演示”);
    //在当前方法内调用自己
    method();
}

    递归参与运行的方法主体不变,而运行的方法的参数变
    注意:递归必须要写一个程序的出口,否则程序无意义

递归的代码演示,计算1-n之间的和

public static void main(String[] args) {
        System.out.println(a(100));
        
    }
    public static int a(int n){
        if(n == 1){
            return 1;
        }
        return n + a(n-1);
    }
    //a(100)=(100+(a(99)=99+a(98)=98+a(97)=......))

递归打印所有目录中的文件路径

public class FileDemo2 {
    public static void main(String[] args) {
        File file = new File("d:\\test");
        getFileAll(file);
    }
    //获取指定目录以及子目录中的所有的文件
    public static void getFileAll(File file) {
        File[] files = file.listFiles();
        //遍历当前目录下的所有文件和文件夹
        for (File f : files) {
            //判断当前遍历到的是否为目录
            if(f.isDirectory()){
                //是目录,继续获取这个目录下的所有文件和文件夹
                getFileAll(f);
            }else{
                //不是目录,说明当前f就是文件,那么就打印出来
                System.out.println(f);
            }
        }
    }
}

搜索指定目录中.java文件(包含子目录)

 自定类继承FileFilter过滤器接口

public class YourFilter implements FileFilter{

    public boolean accept(File pathname) {    
        //如果是文件夹,则不进行过滤,认为满足条件加到File数组中
        if(pathname.isDirectory()){
            return true;
        }
        return pathname.getName().toLowerCase().endsWith(".java");
    }

}

测试类:

public class Demo05 {
    public static void main(String[] args) {
        File file=new File("d:\\test");
        getAllFile(file);
    }
    public static void getAllFile(File file){
        File[] files=file.listFiles(new YourFilter());
        for(File f:files){
            if(f.isDirectory()){
                getAllFile(f);
            }else{
                System.out.println(f);
            }
        }
    }
}

 

以上是关于File类,递归的主要内容,如果未能解决你的问题,请参考以下文章

File类递归

chapter20_File类递归

File类,递归

Java——File类,递归

结合File类浅析递归的使用

File类&递归