• File文件


    File

    中构造方法中File(file,string)传入父路径,和子路径

    boolean delete()     删除此抽象路径名表示的文件或目录   只能删除空文件夹   删除文件时  文件不能被其他程序占用
    boolean exists()    测试此抽象路径名表示的文件或目录是否存在。
    File getAbsoluteFile() 返回此抽象路径名的绝对路径名形式。
    String getAbsolutePath()     返回此抽象路径名的绝对路径名字符串。
    String getName()      返回由此抽象路径名表示的文件或目录的名称。
    String getParent()      返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null。
    boolean isDirectory()   测试此抽象路径名表示的文件是否是一个目录。
    boolean isFile() 测试此抽象路径名表示的文件是否是一个标准文件。 
    long length()  返回由此抽象路径名表示的文件的长度

    String中的endswith方法判断后缀为什么的字符串

    过滤器

    实现fileNamefitor或者filefitor接口里面有参数我们可以试一试就知道什么意思了

    package cn.jiedada.fileter;
    
    import java.io.File;
    import java.io.FileFilter;
    import java.io.FilenameFilter;
    import java.util.ArrayList;
    import java.util.Arrays;
    
    public class Test {
        /*
         * 文件过滤器
         * 调用方法
         * String[] list(FilenameFilter filter) 返回的字符串在该目录下的抽象路径名,满足指定的过滤器表示文件和目录命名数组。  
           File[] listFiles() 返回表示抽象路径名的目录中的文件的路径名表示抽象的数组。  
           File[] listFiles(FileFilter filter) 返回表示的抽象路径名的文件和目录的目录,这个抽象路径名满足指定过滤器表示数组。  
           File[] listFiles(FilenameFilter filter) 返回表示的抽象路径名的文件和目录的目录,这个抽象路径名满足指定过滤器表示数组。 
    
         * 
         * */
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            File file = new File("f:/log");
            MyFileFilter myFileFilter = new MyFileFilter("txt");
            File[] listFiles = file.listFiles(myFileFilter);
            //当盘符错误时,我们输出的结果为null
            //System.out.println(Arrays.toString(listFiles));
            //在listFiles(new FilenameFilter() 方法中实现了
             /*public File[] listFiles(FilenameFilter filter) {
                    String ss[] = list();
                    if (ss == null) return null;
                    ArrayList<File> files = new ArrayList<>();
                    for (String s : ss)
                        if ((filter == null) || filter.accept(this, s))
                            files.add(new File(s, this));
                    return files.toArray(new File[files.size()]);
                }
                所以只需要覆写accept方法就可以了*/
    
            File[] listFiles2 = file.listFiles(new FilenameFilter() {
                
                @Override
                public boolean accept(File dir, String name) {
                    // TODO Auto-generated method stub
                    return name.endsWith("txt");
                }
            });
            System.out.println(Arrays.toString(listFiles2));
        }
    
    }
    class MyFileFilter implements FileFilter{
        String ends;
        
        public MyFileFilter(String ends) {
            super();
            this.ends = ends;
        }
    
        @Override
        public boolean accept(File pathname) {
            // TODO Auto-generated method stub
            return pathname.getName().endsWith(ends);
        }
        
    }

    或者自己实现原理通过把获取的文件转化为String递归判断endwiths方法

    package cn.jiedada.tryanginhome;
    
    import java.io.File;
    import java.io.IOException;
    import java.util.ArrayList;
    
    public class Test2 {
        /*写一段代码完成一下功能:以你们接受每天我发给你们的资料的根目录为准,
         *找出其中的所有的视频文件,然后再一个新的路径下面创建对应的文件,暂时不考虑内容,只要有文件就行
             例如:下面这样的效果,以20150421第一季为根目录
           1首先考录自带的文件过滤器,因为自带的llistfiles方法是判断是文件夹下的,所以我们需要递归的方法(暂时不考虑)
           2自己写一个方法用string的endwith方法判断是否包含后缀名*/
        public static void main(String[] args) throws IOException {
            // TODO Auto-generated method stub
            File file = new File("D:\JAVA上课学习内容\2019-07-31-IO-DAY19");
            ArrayList<File> arrayList = new ArrayList<File>();
            select(file, arrayList);
            //得到数组
            System.out.println(arrayList);
            ArrayList<String> arrayList2 = new ArrayList<String>();
            File file2 = new File("f:/java学习资料");
            //创建文件夹
            file2.mkdirs();
            for (File file3 : arrayList) {
                //获取文件的后缀名
                String name = file3.getName();
                //使用构造方法,指定父文件,传入名字
                File file4 = new File(file2, name);
                file4.createNewFile();
            }
        }
        public static void select(File file,ArrayList<File> arrayList){
            if(file!=null){
                if(file.isFile()){
                    //如果为文件的话我们判断后缀是否为avi
                    if(file.getName().endsWith("avi")){
                        arrayList.add(file);
                    }
                }else{
                    //如果为文件夹的话取出子文件及文件夹
                    File[] listFiles = file.listFiles();
                    for (File file2 : listFiles) {
                        //递归调用
                        select(file2, arrayList);
                    }
                }
            }
        }
    
    }
    View Code

    递归循环

    做一个文件删除和保存删除的数据的方法

    首先判断是不是文件,然后deletefng'fa方法,在文件夹中递归调用方法

    再删除之前用一个容器存储数据

    package cn.jiedada.tryanginhome;
    
    import java.io.File;
    import java.io.IOException;
    import java.util.ArrayList;
    
    public class Test1 {
        /*
         * 完成上课所提到的删除方法
                    【高级部分】:撤销删除(撤销上面刚删除的目录)功能
           因为delete方法只能删除一个文件,不能有子文件所以我们想用递归的方法
           撤回,我们需要判断是文件夹还是文件,分别在删除之前存放在一个容器里面
             */
        public static void main(String[] args) throws IOException {
            // TODO Auto-generated method stub
            File file = new File("F:\log");
            //文件存放
            ArrayList<File> arrayList1 = new ArrayList<File>();
            //文件夹存放
            ArrayList<File> arrayList2 = new ArrayList<File>();
            delFile(file, arrayList1, arrayList2);
            System.out.println(arrayList1);
            System.out.println(arrayList2);
            //循环添加文件夹
            for (File file2 : arrayList2) {
                file2.mkdirs();
            }
            //添加文件
            for (File file1 : arrayList1) {
                file1.createNewFile();
            }
    
        }
        public static void delFile(File file,ArrayList<File> arrayList1,ArrayList<File> arrayList2){
            if(file!=null){
                if(file.isFile()){
                    //存放文件
                    arrayList1.add(file);
                    //删除文件
                    file.delete();
                }else{
                    //存放文件夹
                    arrayList2.add(file);
                    File[] listFiles = file.listFiles();
                    if(listFiles.length!=0){
                    for (File file2 : listFiles) {
                        //递归调用
                        delFile(file2, arrayList1, arrayList2);
                    }
                  }
                }
            }
            //递归删除文件夹
            file.delete();
        }
    
    }
    View Code
  • 相关阅读:
    SpirngBoot整合Mybatis Plus多数据源
    SpringBoot整合EasyPoi 封装Excel导出通用工具类,行高自适应,导出图片
    阿里云服务器安装Docker Compose
    设置Docker容器里的时间
    坏代码导致的性能问题大赏:CPU占用飙到了900%!
    Java程序员涨薪必备的性能调优知识点,收好了!
    SprinMvc快速入门
    python中文乱码问题
    python中自定义函数类的引用(最全)
    datax
  • 原文地址:https://www.cnblogs.com/xiaoruirui/p/11285903.html
Copyright © 2020-2023  润新知