zoukankan      html  css  js  c++  java
  • java基础 File与递归练习 使用文件过滤器筛选将指定文件夹下的小于200K的小文件获取并打印按层次打印(包括所有子文件夹的文件) 多层文件夹情况统计文件和文件夹的数量 统计已知类型的数量 未知类型的数量

    package com.swift.kuozhan;
    
    import java.io.File;
    import java.io.FileFilter;
    
    /*使用文件过滤器筛选将指定文件夹下的小于200K的小文件获取并打印(包括所有子文件夹的文件)。*/
    
    public class kuaozhan1 {
    
        public static void main(String[] args) {
    
            File dir = new File("c:/");
            if(!dir.exists()) {
                throw new RuntimeException("该文件夹不存在");
            }
            get200(dir, 0);
        }
    
        private static void get200(File dir, int length) {
            if(!dir.exists()) {
                throw new RuntimeException("该文件夹不无访问权限");
            }
            for (int i = 0; i < length; i++)
                System.out.print("	");
            System.out.println(dir);
            File[] files = dir.listFiles(new FileFilter() {
    
                @Override
                public boolean accept(File pathname) {
                    if (pathname.isDirectory())
                        return true;
                     if (pathname.isHidden())
                     return false;
    
                    if (pathname.length() / 1024 < 200)
                        return true;
                    return false;
                }
    
            });
    
            for (File file : files) {
                if (file.isDirectory()) {
                    get200(file, length + 1);
                } else {
                    for (int i = 0; i < length; i++)
                        System.out.print("	");
                    System.out.println("	" + file);
                }
            }
        }
    }

    统计文件夹中(不包含子文件夹)文件大于10byte的文件数量并删除这些文件

    package com.swift.base;
    
    import java.io.File;
    import java.io.FileFilter;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Scanner;
    
    
    /*训练知识点
    1.File对象的删除
    2.文件判断功能
    3.文件的大小
    4.listFiles
    
    训练描述
    获取指定路径的文件对象
    如果文件对象存在且是文件夹,输出文件夹下(不包含子文件夹)文件大小大于10的文件个数及大小大于10文件的名称
    如果大小大于10的文件大于1,根据键盘录入选择是否删除这些文件
    如果大小大于10的文件小于1,控制台提示没有文件大于10
    
    操作步骤描述
    1.使用File类的构造方法创建文件对象
    2.判断该文件是否存在且是文件夹,如果是:
        a).获取文件夹下所有的文件对象
        b).创建集合来存放需要删除的文件对象
        c).遍历所有文件夹下所有的文件对象
            i).如果文件对象是文件且文件的大小大于10就添加文件到集合中
        d).如果集合中的元素大于1:
            i).输出集合中元素的个数及所有集合中所有的元素
            ii).提示是否进行删除
            iii).如果输入删除,遍历集合中所有的file对象进行删除,并提示**文件已经删除了
        e).输出提示文件夹下没有大小大于10的文件对象*/
    
    public class BaseKnowledge5 {
    
        public static void main(String[] args) {
            
            File dir=new File("c:/abc");
            if(dir.exists()&&dir.isDirectory()) {
                File[] files = dir.listFiles(new FileFilter() {
    
                    @Override
                    public boolean accept(File pathname) {
                        if(pathname.isDirectory()) 
                            return false;
                        if(pathname.length()>10) 
                            return true;
                        return false;
                    }});
    
                List<File> list=new ArrayList<>();
                for(File file:files) {
                    list.add(file);
                }
                if(list.size()>1) {
                    System.out.println(list.size());
                    for(File file:list) {
                        System.out.println(file);
                    }
                    Scanner scan =new Scanner(System.in);
                    System.out.println("请输入是否删除? 回答 删除 和 不删除");
                    String str=scan.nextLine();
                    if("删除".equals(str)) {
                        for(File file:list) {
                            file.delete();
                        }
                        System.out.println("文件已删除");
                    }
                }else {
                    System.out.println("没有大于10的文件");
                }
                
            }
        }
    
    }

     统计多层文件夹下文件和文件夹的数量

    package com.swift.Test;
    
    import java.io.File;
    
    /*训练描述
    
    要求:获取指定路径下文件及文件夹的个数,包含子目录中的文件及文件夹
    步骤:
        1. 指定要打印的目录File对象
        2. 调用getFileAll()方法
            2.1 获取指定目录中的所有File对象
            2.2 遍历得到每一个File对象
            2.3 判断当前File 对象是否是目录
                判断结果为true,说明为目录,通过递归,再次调用步骤2的getFileAll()方法
                判断结果为false,说明是文件,打印文件的路径*/
    
    public class DemoFile {
        
        public static int dirNums;
        public static int fileNums;
        
        public static void main(String[] args) {
            
            File dir = new File("c:/abc");
            getFileAll(dir,0);
            System.out.println("文件夹的数量是:"+dirNums);
            System.out.println("文件的数量是"+fileNums);
            
        }
    
        private static void getFileAll(File dir,int deep) {
            dirNums++;
            for(int i=0;i<deep;i++) {
                System.out.print("	");
            }
            System.out.println(dir);
            File[] files=dir.listFiles();
            for(File file:files) {
                if(file.isDirectory()) {
                    getFileAll(file,deep+1);
                }else {
                    for(int i=0;i<deep;i++) {
                        System.out.print("	");
                    }
                    fileNums++;
                    System.out.println("	"+file);
                }
                
            }
        }
    
    }

     统计已知类型的数量

    package com.swift.Test;
    
    import java.io.File;
    import java.util.HashMap;
    import java.util.Map;
    
    /*已知一个文件夹路径,统计该文件夹(包含子文件夹)中每种类型的文件及个数
    注意:用文件类型(后缀名,不包含.(点),如:"java","txt")作为key,
        用个数作为value,放入到map集合中,并用两种方式遍历map集合
        例如:
        doc 的类型的文件有  3 个
        java 的类型的文件有  5 个
        txt 的类型的文件有  7 个*/
    
    //第一种情况统计指定类型文件的数量
    public class Jinji1 {
    
        public static int docNums;
        public static int txtNums;
        public static int javaNums;
    
        public static void main(String[] args) {
    
            File dir = new File("c:/abc");
            getNums(dir);
            System.out.println("doc 的类型的文件有 "+docNums);
            System.out.println("java 的类型的文件有 "+javaNums);
            System.out.println("txt 的类型的文件有 "+txtNums);
    
        }
    
        private static void getNums(File dir) {
            File[] files = dir.listFiles();
            for (File file : files) {
                if (file.isDirectory()) {
                    getNums(file);
                } else {
                    if (file.getName().toLowerCase().endsWith("doc")) {
                        docNums++;
                    } else if (file.getName().toLowerCase().endsWith("txt")) {
                        txtNums++;
                    } else if (file.getName().substring(file.getName().lastIndexOf(".")+1).equals("java")) {
                        javaNums++;
                    }
                }
            }
        }
    
    }

    统计未知类型的数量

    package com.swift.Test;
    
    import java.io.File;
    import java.util.HashMap;
    import java.util.Map;
    import java.util.Scanner;
    
    /*键盘录入一个文件夹路径,统计该文件夹(包含子文件夹)中每种类型的文件及个数
    注意:用文件类型(后缀名,不包含.(点),如:"java","txt")作为key,
        用个数作为value,放入到map集合中,并用两种方式遍历map集合
        例如:
        doc 的类型的文件有  3 个
        java 的类型的文件有  5 个
        txt 的类型的文件有  7 个*/
    
    //第二种情况统计未知类型文件的数量
    public class FileNums {
    
        public static void main(String[] args) {
            
            File dir=inputDir();
            Map<String,Integer> map=new HashMap<>();
            getNums(dir,map);
            System.out.println(map);
        }
    
        private static void getNums(File dir,Map<String, Integer> map) {
            
            File[] files=dir.listFiles();
            for(File file:files) {
                if(file.isDirectory()) {
                    getNums(file,map);
                }else {
                    String name=file.getName();
                    int n=name.lastIndexOf(".")+1;
                    name=name.substring(n);
                    if(!map.containsKey(name)) {
                        map.put(name, 1);
                    }else {
                        map.put(name,map.get(name)+1);
                    }
                }
            }
        }
    
        private static File inputDir() {
            
            Scanner scan = new Scanner(System.in);
            System.out.println("请输入一个目录");
            String dir=scan.nextLine();
            File dirF=new File(dir);
            if(!dirF.exists()) {
                throw new RuntimeException("这个目录不存在!");
            }
            if(!dirF.isDirectory())
                throw new RuntimeException("这不是一个目录!");
            return dirF;
        }
    
    }

     层级练习

    package com.swift.Test;
    
    import java.io.File;
    import java.util.Scanner;
    
    /*从键盘接收一个文件夹路径,把文件夹中的所有文件以及文件夹的名字按层级打印
    例如:
    aaa是文件夹,里面有bbb.txt,ccc.txt,ddd.txt这些文件,有eee这样的文件夹,eee中有fff.txt和ggg.txt,打印出层级来
        aaa
            bbb.txt
            ccc.txt
            ddd.txt    
            eee
                fff.txt
                ggg.txt*/
    
    public class PringFileCeng {
    
        public static void main(String[] args) {
    
            File dir=getDir();
            traverse(dir,0);
        }
    
        private static void traverse(File dir,int deep) {
            
            for(int i=0;i<deep;i++) {
                System.out.print("	");
            }
            System.out.println(dir);
            File[] files=dir.listFiles();
            for(File file:files) {
                if(file.isDirectory()) {
                    traverse(file,deep+1);
                }else {
                    for(int i=0;i<deep;i++) {
                        System.out.print("	");
                    }
                    System.out.println("	"+file);
                }
            }
            
        }
    
        private static File getDir() {
            
            Scanner scan =new Scanner(System.in);
            System.out.println("请输入一个目录:");
            String str=scan.nextLine();
            File dirF=new File(str);
            if(!dirF.exists()) {
                throw new RuntimeException("这个目录不存在!");
            }
            if(!dirF.isDirectory()) {
                throw new RuntimeException("这不是一个目录!");
            }
            return dirF;
        }
    
    
    }
  • 相关阅读:
    23种设计模式
    (C# 基础) 接口
    (C#) Handling and Raising Events
    (C# 基础) 位运算
    (C#) 线程之 AutoResetEvent, EventHandle.
    (C#) 线程基础
    div在固定高的文字垂直居中
    滚动置顶
    jQuery给同一个元素两个点击事件
    (置顶)js实现超过页面一屏后,点击图标滚动到页面顶部top
  • 原文地址:https://www.cnblogs.com/qingyundian/p/8504180.html
Copyright © 2011-2022 走看看