File的概述和构造方法

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]);
    }
}
上次更新 2025/1/20 17:03:55