18.java-File 类

File 类

​ File类代表操作系统的文件对象(文件、文件夹)

思路 : 今后但凡是要用 Java 程序操作文件或文件夹, 第一个就要想到File类

File类创建对象

  • File 对象可以定位文件和文件夹
  • File 封装的对象仅仅是一个路径名,这个路径可以是存在的,也可以是不存在的

18.java-File 类_第1张图片

注意:一个File对象代表硬盘中实际存在的一个文件或者目录。 2. 无论该路径下是否存在文件或者目录,都不影响File对象的创建

相对路径和绝对路径

  • 绝对路径: 从盘符根目录开始,一直到某个具体的文件或文件夹 eg:D:\abc\a.txt
  • 相对路径: 相对于当前项目

File 类的常用方法

18.java-File 类_第2张图片
B-1706018974738)

案例解析:

/*
        需求:定义一个方法,从键盘录入一个文件夹路径,如果输入错误,给出提示继续输入,
     */
    public static File getFile(){
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入文件路径");
        while (true) {
            String pathName = sc.nextLine();
            File file = new File(pathName);
            if (!file.exists()){
                System.out.println("路径输入错误,请重新输入:");
            }else if (file.isDirectory()){
                System.out.println("您输入的是文件夹路径,请重新输入:");
            }else {
                return file;
            }
        }

注意:length()如果操作的是文件夹,返回错误的字节数

File 类的创建和删除方法

18.java-File 类_第3张图片

注意:delete方法默认只能删除文件和空文件夹,删除方法直接删除不走回收站

File 类的遍历方法

public File[] listFiles()	//获取当前目录下所有的  “一级文件对象” ,返回 File 数组

记得加 !=null 的判断

  • 当调用者File表示的路径不存在时,返回null
  • 当调用者File表示的路径是文件时,返回null
  • 当调用者File表示的路径是一个空文件夹时,返回一个长度为0的数组
  • 当调用者File表示的路径是需要权限才能访问的文件夹时,返回null
  • 当调用者文件表示的路径是一个有内容的文件夹时,将里面所有文件和文件夹的路径放在文件数组中返回
  • 当调用者文件表示的路径是一个有隐藏文件的文件夹时,将里面所有文件和文件夹的路径放在数组中返回,
    包含隐藏文件

案例解析:

//需求:获取一个文件夹下所有.java文件
public static void queryJavaFlie(File file){
        //获取这个文件夹下所有的文件和文件夹对象
        File[] files = file.listFiles();
        //遍历数组,获取每个文件和文件夹对象
        for (File file1 : files) {
            //判断是否是文件
            if (file1.isFile()){
                //判断是否是java文件
                if (file1.getName().endsWith(".java")){
                    System.out.println(file1);
                }
            }else {
                //代码执行到这里,说明是file是文件夹
                //递归调用
                if (file1.listFiles() != null){
                    queryJavaFlie(file1);
                }
            }
        }
    }
 public static void main(String[] args) {
        /*
            需求:键盘录入-个文件夹路径,统计文件夹的大小
         */
        System.out.println(getLength(Test1.getFile()));
    }
    public static long getLength(File file){
        long sum = 0;
        File[] files = file.listFiles();
        for (File file1 : files) {
            if (file1.isFile()){
                sum += file1.length();
            }else {
                if (file1.listFiles()!=null){
                    sum+=getLength(file1);
                }
            }
        }
        return sum;
    }
public static void main(String[] args) {
/*
     键盘录入一个文件夹路径,统计文件夹中每种文件的个数并打印(考虑子文件夹)
 */
        File file = new File("D:\\javawork");
        printFileNum(file);
        System.out.println(map);
        System.out.println(count);
    }
    public static void printFileNum(File file){
        File[] files = file.listFiles();
        for (File f : files) {
            if (f.isFile()) {
                if (f.getName().contains(".")) {
                    String[] split = f.getName().split("\\.");
                    String s = split[split.length - 1];
                    if (!map.containsKey(s)) {
                        map.put(s, 1);
                    } else {
                        map.put(s, map.get(s) + 1);
                    }
                } else {
                    //文件中不包含,说明这个文件没有后缀名,单独统计
                    count++;
                }
            }else {
                //执行到这里说明是文件夹
                if (f.listFiles()!=null){
                    printFileNum(f);
                }
            }
        }
    }


 //执行到这里说明是文件夹
                if (f.listFiles()!=null){
                    printFileNum(f);
                }
            }
        }
    }

你可能感兴趣的:(java,开发语言)