# File的概述和构造方法

File类是表示文件或目录的对象,是文件和目录路径名的抽象表示形式。

# File类中的方法

三种不同参数的构造方法

方法名称 说明
public File(String pathname) 根据一个文件路径创建一个File对象
public File(String parent, String child) 根据父路径字符串和子路径名创建一个File对象
public File(File parent, String child) 根据父路径File对象和子路径名字符串创建一个File
package File;

import java.io.File;

public class Main {
    public static void main(String[] args) {
        //文件对象
        //1.根据文件路径创建文件对象(根据字符串表示的路劲,变成File对象)
        String Url = "E:\\desktop\\新建文本文档.text";
        File file = new File(Url);
        System.out.println(file);
        //2.根据父路径字符串和子路径名创建一个`File`对象
        //父级路径 E:\desktop
        //子级路径 新建文本文档.text
        String parentUrl = "E:\\desktop";
        String childName = "新建文本文档.text";
        File file1 = new File(parentUrl, childName);
        System.out.println(file1);
        //在java中\叫转义字符,因此路径需要使用\\表示一个\
        //在不同的操作系统中,\的含义不同,在windows中表示路径分隔符,因此不建议我们自己来拼接路径
        File url1 = new File(parentUrl + "\\" + childName);
        System.out.println(url1);

        //3。讲一个File表示的路径和一个字符串表示的路径进行拼接
        File parentUrl1 = new File("E:\\desktop");
        String childName1 = "新建文本文档.text";
        File url2 = new File(parentUrl1, childName1);
        System.out.println(url2);
    }
}

# File类中常见的成员方法(判断、获取)

# 判断和获取相关的方法

方法名称 说明
public boolean isDirectory() 判断此路径名表示的File是否为文件夹
public boolean isFile() 判断此路径名表示的File是否为文件
public boolean exists() 判断此路径名表示的File是否存在
public long length() 返回文件的大小(字节数量)
public String getAbsolutePath() 返回此路径名的绝对路径名字符串
public String getPath() 返回定义文件时使用的路径
public String getName() 返回此路径名表示的File的文件名(带后缀)
public long lastModified() 返回文件最后的呢修改时间
package File;

import java.io.File;
import java.text.SimpleDateFormat;

public class Main {
    public static void main(String[] args) {
        //文件对象
        //1.根据文件路径创建文件对象(根据字符串表示的路劲,变成File对象)
        String Url = "E:\\desktop\\a.txt";
        File file = new File(Url);
        System.out.println(file);
        //2.根据父路径字符串和子路径名创建一个`File`对象
        //父级路径 E:\desktop
        //子级路径 新建文本文档.txt
        String parentUrl = "E:\\desktop";
        String childName = "新建文本文档.txt";
        File file1 = new File(parentUrl, childName);
        System.out.println(file1);
        //在java中\叫转义字符,因此路径需要使用\\表示一个\
        //在不同的操作系统中,\的含义不同,在windows中表示路径分隔符,因此不建议我们自己来拼接路径
        File url1 = new File(parentUrl + "\\" + childName);
        System.out.println(url1);

        //3。讲一个File表示的路径和一个字符串表示的路径进行拼接
        File parentUrl1 = new File("E:\\desktop");
        String childName1 = "新建文本文档.txt";
        File url2 = new File(parentUrl1, childName1);
        System.out.println(url2);
        //使用相对路径获取file对象
        File file2 = new File("java-first\\a.txt");
        System.out.println(file2);
        System.out.println(file2.exists());
        //FIle对象中的成员方法
        //1.判断此路径名表示的File是否为文件夹 isDirectory()
        System.out.println(file.isDirectory());
        //2.判断此路径名表示的File是否为文件 isFile()
        System.out.println(file.isFile());
        //3.判断此路径名表示的File是否存在 exists()
        System.out.println(file.exists());
        //4.返回文件的大小
        //注:;这个方法只能获取文件的大小,单位是字节,如果文件的单位是M可以不断的除以1024
        //这个方法无法获取文件夹的大小,需要把这个文件夹中的所有文件都累加在一起
        System.out.println(file.length());
        //5.返回此路径名的绝对路径名字符串
        System.out.println(file.getAbsolutePath());
        //6.返回定义文件时使用的字符串
        System.out.println(file.getPath());
        //7.返回文件名 带后缀
        System.out.println(file.getName());
        //8.返回文件的最后修改时间
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        System.out.println(simpleDateFormat.format(file.lastModified()));

    }
}

# 创建、删除的方法

方法名称 说明
public boolean createNewFile() 创建一个文件,如果文件已经存在,则不创建,返回false,如果文件不存在,则创建,返回true
public boolean delete() 删除此路径名表示的File,如果删除的是文件夹则需要判断文件夹中是否有文件,如果有文件则删除不成功 (不走回收站)
public boolean mkdir() 创建单级文件夹,如果文件夹已经存在,则不创建,返回false,如果文件夹不存在,则创建,返回true
public boolean mkdirs() 创建多级文件夹,如果文件夹已经存在,则不创建,返回false,如果文件夹不存在,则创建,返回true
package File;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;

public class Main {
    public static void main(String[] args) throws IOException {
        //创建删除的方法
        // 1.创建一个新的空文件
        //如果文件路劲不存在则会抛出IOException异常
        //创建的一定是文件 如果路径中未写文件名则会创建一个没有后缀的文件
        File file3 = new File("attrs\\file\\a.txt");
        boolean newFile = file3.createNewFile();
        System.out.println(newFile);

        //2.创建文件夹
        //如果路劲中存在同名的文件或文件夹则创建不成功
        //mkdir只能创建单级文件夹
        File file4 = new File("attrs\\file\\newFile");
        boolean mkdir = file4.mkdir();
        System.out.println(mkdir);

        //创建多级文件夹
        //可以创建单级和多级文件夹
        File file5 = new File("attrs\\file\\newFile\\newFile1\\newFile2");
        boolean mkdirs = file5.mkdirs();
        System.out.println(mkdirs);

        //3.删除文件或空文件夹
        //如果删除的是文件则直接删除不走回收站
        //如果删除的是文件夹则需要判断文件夹中是否有文件,如果有文件则删除不成功 如果没有文件则直接删除 不走回收站
        File file6 = new File("attrs\\file\\newFile\\newFile1\\newFile2");
        boolean delete = file6.delete();
        System.out.println(delete);
    }
}

# 获取并遍历

方法名称 说明
重点掌握public File[] listFiles() 获取此路径名表示的File的文件和文件夹(所有内容),返回一个File数组
public String[] list() 获取此路径名表示的File的文件和文件夹(所有内容),返回一个String数组
public String[] list(FilenameFilter filter) 利用文件名过滤器获取当前路径下的所有内容
public static File[] listRoots() 列出可用的文件系统根
package File;

import java.io.File;

public class Main {
    public static void main(String[] args) {
        //文件过滤
        //需求获取文件夹下的所有txt文件
        File file9 = new File("attrs\\file");
        File[] listFiles = file9.listFiles(s -> s.getName().endsWith(".txt"));
        System.out.println(Arrays.toString(listFiles));


        //1.listRoots 获取系统中所有的盘符
        File[] listRoots = File.listRoots();
        System.out.println(Arrays.toString(listRoots));//[C:\, D:\, E:\, F:\]

        //2.list 获取路径下的所有文件(字符串名字)
        File file8 = new File("attrs\\file");
        String[] list1 = file8.list();
        System.out.println(Arrays.toString(list1));//[a.txt, newFile]

        //3.list(filename filter) 利用文件名过滤器获取当前路径下的所有内容
        //需求获取文件夹下的所有txt文件
        File file10 = new File("attrs\\file");
        //dir 父级路径
        //s 子级路径
        String[] list2 = file10.list((dir, s) -> new File(dir, s).getName().endsWith(".txt"));
        System.out.println(Arrays.toString(list2));
    }
}

# 文件练习

package File;
public class Main {
    public static void main(String[] args) {
        //综合练习
        //1.需求 在当前模块下的aaa文件夹中创建一个a.txt文件
        File file11 = new File("attrs\\a.txt");
        try {
            boolean newFile1 = file11.createNewFile();
            System.out.println(newFile1);
        } catch (IOException e) {
            System.out.println("文件创建失败");
        }
        //2.需求 定义一个方法找某一个文件夹中是否有 暂时不需要考虑子文件夹
        File file12 = new File("attrs\\file");
        File[] listFiles1 = file12.listFiles(s -> s.getName().endsWith(".txt"));
        if (listFiles1 != null) {
            System.out.println(Arrays.toString(listFiles1));
        }
        //获取更目录非txt文件
        File file13 = new File("E:\\");
        File[] listFiles2 = file13.listFiles(s -> !s.getName().endsWith(".txt"));
        if (listFiles2 != null) {
            System.out.println(Arrays.toString(listFiles2));
        }
        //3.需求 定义一个方法找某一个文件夹中是否有.txt结尾的文件 (需要考虑子文件夹)
        File file14 = new File("E:\\desktop\\小程序移动医保测试");
        File[] files = file14.listFiles();
        File[] fileTxt = getFileTxt(files);
        System.out.println(Arrays.toString(fileTxt));

        //4.需求 删除一个多级文件夹
        File file15 = new File("attrs\\deleteFileText\\newFile1\\newFile2");
        System.out.println("删除结果" + file15);
        boolean mkdirs1 = file15.mkdirs();
        System.out.println("创建结果" + mkdirs1);
        File file16 = new File("attrs\\deleteFileText");
        deleteFile(file16);


        //5.统计文件夹中文件出现的个数
        File file17 = new File("E:\\desktop\\小程序移动医保测试");
        Map<String, Integer> map = getFileGroup(files);
        System.out.println(map);

        //6.获取文件夹的总大小
        File file18 = new File("E:\\desktop\\小程序移动医保测试");
        long fileSize = getFileSize(file18);
        System.out.println("文件夹总大小为" + fileSize / (1024) / 1024 + "M");
    }
    //删除某个文件夹中的所有内容(包含文件或文件夹)
    public static void deleteFile(File file) {
        File[] files = file.listFiles();
        System.out.println("文件" + Arrays.toString(files));
        if (files == null) return;
        else if (files.length > 0) {
            for (File fileItem : files) {
                if (fileItem.isDirectory()) {
                    deleteFile(fileItem);
                } else {
                    boolean delete = fileItem.delete();
                    System.out.println(fileItem.getName() + "......" + delete);
                }
                ;
            }
            file.delete();
        }


    }

    //统计一个文件夹的总大小
    public static long getFileSize(File file) {
        long size = 0;
        File[] files = file.listFiles();
        if (files == null) return 0;
        for (File file1 : files) {
            if (file1.isDirectory()) size += getFileSize(file1);
            else size += file1.length();
        }
        return size;
    }

    //数组分组
    public static Map<String, Integer> getFileGroup(File[] files) {
        File[] flies = getFiles(files);
        Map<String, Integer> map = new HashMap<>();
        for (File file : flies) {
            //获取文件后缀名
            String[] splitList = file.getName().split("\\.");
            String s = splitList[splitList.length - 1];
            if (map.containsKey(s)) map.put(s, map.get(s) + 1);
            else map.put(s, 1);
        }
        return map;
    }

    //获取目录中所有的文件(不包含文件夹)
    public static File[] getFiles(File[] files) {
        if (files == null) return new File[0];
        ArrayList<File> fileArrayList = new ArrayList<>();
        for (File file : files) {
            if (!file.exists()) continue;
            else if (file.isDirectory()) {
                Collections.addAll(fileArrayList, getFiles(file.listFiles()));
            } else if (file.isFile()) {
                fileArrayList.add(file);
            }
        }
        return fileArrayList.toArray(new File[0]);
    }

    //获取目录中所有的txt文件 包含子文件夹
    public static File[] getFileTxt(File[] files) {
        if (files == null) return new File[0];
        ArrayList<File> fileArrayList = new ArrayList<>();
        for (File file : files) {
            if (file.isDirectory())
                Collections.addAll(fileArrayList, getFileTxt(file.listFiles()));
            else if (file.isFile() && file.getName().endsWith(".txt"))
                fileArrayList.add(file);

        }
        return fileArrayList.toArray(new File[0]);
    }
}
上次更新: 1/20/2025, 5:03:55 PM