• 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);
                }
            }
        }
    }
  • 相关阅读:
    120所国家重点建设大学(211工程和教育部直属)[国家一类本科大学]详细情况一览表
    VC画线几个常见方法
    中国地学35个国家重点实验室分布一览
    可执行文件加入Linux默认路径的办法
    SVN 常用命令 客户端
    ls(list) linux 功能说明
    Vim
    Linux添加FTP用户并设置权限
    tar [cxtzjvfpPN] 文件与目录
    linux etc/passwd 有关
  • 原文地址:https://www.cnblogs.com/lzw123-/p/9507914.html
Copyright © 2020-2023  润新知