Erlo

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

时间:2018-03-04   阅读:1522次   来源:博客园
页面报错
赞1

package com.swift.kuozhan;

import java.io.File;
import java.io.FileFilter;

#zs#使用文件过滤器筛选将指定文件夹下的小于200K的小文件获取并打印(包括所有子文件夹的文件)。#fzs#

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("t");
        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("t");
                System.out.println("t" + file);
            }
        }
    }
}

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

package com.swift.Test;

import java.io.File;

#zs#训练描述

要求:获取指定路径下文件及文件夹的个数,包含子目录中的文件及文件夹
步骤:
    1. 指定要打印的目录File对象
    2. 调用getFileAll()方法
        2.1 获取指定目录中的所有File对象
        2.2 遍历得到每一个File对象
        2.3 判断当前File 对象是否是目录
            判断结果为true,说明为目录,通过递归,再次调用步骤2的getFileAll()方法
            判断结果为false,说明是文件,打印文件的路径#fzs#

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("t");
        }
        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("t");
                }
                fileNums++;
                System.out.println("t"+file);
            }
            
        }
    }

}

 统计已知类型的数量

package com.swift.Test;

import java.io.File;
import java.util.HashMap;
import java.util.Map;

#zs#已知一个文件夹路径,统计该文件夹(包含子文件夹)中每种类型的文件及个数
注意:用文件类型(后缀名,不包含.(点),如:"java","txt")作为key,
    用个数作为value,放入到map集合中,并用两种方式遍历map集合
    例如:
    doc 的类型的文件有  3 个
    java 的类型的文件有  5 个
    txt 的类型的文件有  7 个#fzs#

//第一种情况统计指定类型文件的数量
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;

#zs#键盘录入一个文件夹路径,统计该文件夹(包含子文件夹)中每种类型的文件及个数
注意:用文件类型(后缀名,不包含.(点),如:"java","txt")作为key,
    用个数作为value,放入到map集合中,并用两种方式遍历map集合
    例如:
    doc 的类型的文件有  3 个
    java 的类型的文件有  5 个
    txt 的类型的文件有  7 个#fzs#

//第二种情况统计未知类型文件的数量
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;

#zs#从键盘接收一个文件夹路径,把文件夹中的所有文件以及文件夹的名字按层级打印
例如:
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#fzs#

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("t");
        }
        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("t");
                }
                System.out.println("t"+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;
    }


}

 

评论留言

还没有评论留言,赶紧来抢楼吧~~

吐槽小黑屋()

* 这里是“吐槽小黑屋”,所有人可看,只保留当天信息。

  • Erlo吐槽

    Erlo.vip2021-09-28 03:03:53Hello、欢迎使用吐槽小黑屋,这就是个吐槽的地方。
  • 返回顶部

    给这篇文章打个标签吧~

    棒极了 糟糕透顶 好文章 PHP JAVA JS 小程序 Python SEO MySql 确认