Java File类使用及获取整个目录下的文件/删除整个文件夹

1.File类

Java文件类以抽象的方式代表文件名和目录路径名。该类主要用于文件和目录的创建、文件的查找和文件的删除等。

有以下四种方法构建一个File对象:

  1. File(File parent,String child):以父抽象路径名和子路径名字符串创建新的File实例。
  2. File(String pathName):给定路径名字符串转换为抽象路径名来创建新的File实例。
  3. File(String parent,String child):以父路径和子路径名字符串创建新的File实例。
  4. File(URI uri):将给定的 file: URI转换为抽象路径名来创建新的 File实例。

2.常用方法

方法作用
boolean exists()判断抽象路径代表的文件或目录是否存在
boolean createNewFile()创建一个文件,当且仅当具该名称的文件不存在时
boolean isDirectory()判断抽象路径是否为目录
boolean isFile()判断抽象路径是否为普通文件
boolean delete()删除此抽象路径代表的文件或者路径,只有当前文件夹下没有文件的情况才能删除
String getName()返回由此抽象路径名表示的文件或目录的名称
String getParent()抽象路径名的父的路径名字符串,如果此路径名未命名为父目录,则返回null。
String getAbsolutePath()返回此抽象路径名的绝对路径名字符串
String[] list(FilenameFilter filter)抽象路径名表示的目录中满足指定过滤器的文件和目录
File[] listFile()抽象路径名表示的目录中的文件
File[] mkdir()创建抽象路径名表示的目录中,当且仅当父抽象路径的目录全部存在时才能创建成功
File[] mkdirs()创建抽象路径名表示的目录中,会一次性创建抽象路径中所有的目录,假如某些目录不存在时

API如下图:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3.简单使用及案例

以下案例包括了:
文件的创建/删除/获取决对路径/文件是否存在/是否是文件或目录/设置文件状态/创建文件夹等

import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.logging.SimpleFormatter;

public class FileLearning {
    public static void main(String[] args) {
        //通过将给定路径名字符串转换成抽象路径名来创建一个新 File 实例。
        String filename = "name/file1.txt";
        //通过文件名创建一个file对象
        File filex = new File("F:" + File.separator + "file2.txt");
        //根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。
        //File filey = new File("F:" + File.separator + "file", "text.txt");
        File filey = new File("F:" + File.separator + "file" + File.separator + "file1" + File.separator + "file2");
        if (!filey.exists()) {
            //创建全部的父目录文件夹
            filey.mkdirs();
//            try {
//                filey.createNewFile();
//            } catch (IOException e) {
//                e.printStackTrace();
//            }
        }
        System.out.println(filey.getAbsolutePath());
        System.out.println(filex.renameTo(new File("renameTo.txt")));
        System.out.println("renameTo:" + filex.getName());
        String[] fl = filey.list();
        for (String s : fl) {
            System.out.println(s);
        }

        if (!filex.exists()) {
            try {
                filex.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        System.out.println(filex.getAbsolutePath());
        //通过给定的父抽象路径名和子路径名字符串创建一个新的File实例。
        File file = new File(new File("F:" + File.separator), filename);
        //不管文件是否真实存在,都可以输出文件的绝对路径
        // System.out.println(file.getAbsolutePath());
        //判断文件是否真实存在
        boolean isExists = file.exists();
        if (isExists) {
            System.out.println(file.getAbsolutePath());
            //删除文件
            //需要注意的是当删除某一目录时,必须保证该目录下没有其他文件才能正确删除,否则将删除失败。
            //file.delete();
        } else {
            //创建文件夹,假如父目录不存在,会报错
            //判断父目录是否存在
            //存在则直接创建文件
            if (file.getParentFile().exists()) {
                try {
                    file.createNewFile();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            } else {
                //mkdir( )方法创建一个文件夹,成功则返回true,失败则返回false。失败表明File对象指定的路径已经存在,或者由于整个路径还不存在,该文件夹不能被创建。
                //file.getParentFile().mkdir();
                //mkdirs()方法创建一个文件夹和它的所有父文件夹。
                file.getParentFile().mkdirs();
                try {
                    file.createNewFile();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }


        }
        //获取文件名或者目录名/获取父目录名
        System.out.println("getName:" + file.getName() + "    getParent:" + file.getParent());
        //输出绝对路径
        System.out.println("mkdir:" + file.getAbsolutePath());
        //将此抽象路径名转换为一个路径名字符串。
        System.out.println("mkdir:" + file.getPath());
        //测试此抽象路径名是否为绝对路径名。
        System.out.println(file.isAbsolute());
        //判断是否为目录
        System.out.println(file.isDirectory());
        String path = "G:\\android_work\\MVP_RxJava_Retrofit2_Demo\\app";
        ArrayList<String> list = new ArrayList<>();

        getAllFileName(path, list);
        list.forEach(it -> {
            //System.out.println(it);
        });

        //deleteFolder(new File("F:\\java"));

        try {
            //创建临时文件
            File file1 = File.createTempFile("temp", "txt");
            //只读
            file1.setReadOnly();
            //可读
            file1.setReadable(true);
            //可写
            file1.setWritable(true);
            //可执行
            file1.setExecutable(true);
            //获取最后一次修改的时间
            long date = file1.lastModified();
            Date x = new Date();
            x.setTime(date);
            System.out.println(new SimpleDateFormat().format(x));

            //设置最后一次修改的时间
            file1.setLastModified(new Date().getTime());
            //文件是否隐藏
            file1.isHidden();
            //获取文件长度
            long len = file1.length();


        } catch (IOException e) {
            e.printStackTrace();
        }


    }


    //获取所有文件
    public static void getAllFileName(String path, ArrayList<String> list) {
        File file = new File(path);
        //获取全部File
        //返回目录名加文件名
        //添加过滤器
        String[] strings = file.list();
        for (String string : strings) {
            System.out.println(string);
        }
        //这些路径名表示此抽象路径名所表示目录中的文件。
        File[] files = file.listFiles(new FileFilter() {
            @Override
            public boolean accept(File pathname) {
                return true;
            }
        });
        for (int i = 0; i < files.length; i++) {
            //判断是否是目录,是的话继续递归
            if (files[i].isDirectory()) {
                getAllFileName(files[i].getAbsolutePath(), list);
            } else {
                //否则添加到list
                //获取全部文件名
                list.add(files[i].getName());
                //获取全部包+文件名
                //list.add(files[i].getAbsolutePath());
            }
        }
    }

    //需要注意的是当删除某一目录时,必须保证该目录下没有其他文件才能正确删除,否则将删除失败。
    public static void deleteFolder(File folder) throws Exception {
        if (!folder.exists()) {
            throw new Exception("文件不存在");
        }
        File[] files = folder.listFiles();
        if (files != null) {
            for (File file : files) {
                if (file.isDirectory()) {
                    //递归直到目录下没有文件
                    deleteFolder(file);
                } else {
                    //删除
                    file.delete();
                }
            }
        }
        //删除
        folder.delete();

    }
}

标题最后附上2个比较常用的方法:

1.获取整个文件夹下的文件

 //获取所有文件
    public static void getAllFileName(String path, ArrayList<String> list) {
        File file = new File(path);
        //获取全部File
        //返回目录名加文件名
        //添加过滤器
        String[] strings = file.list();
        for (String string : strings) {
            System.out.println(string);
        }
        //这些路径名表示此抽象路径名所表示目录中的文件。
        File[] files = file.listFiles(new FileFilter() {
            @Override
            public boolean accept(File pathname) {
                return true;
            }
        });
        for (int i = 0; i < files.length; i++) {
            //判断是否是目录,是的话继续递归
            if (files[i].isDirectory()) {
                getAllFileName(files[i].getAbsolutePath(), list);
            } else {
                //否则添加到list
                //获取全部文件名
                list.add(files[i].getName());
                //获取全部包+文件名
                //list.add(files[i].getAbsolutePath());
            }
        }
    }

2.删除整个文件夹下

  //需要注意的是当删除某一目录时,必须保证该目录下没有其他文件才能正确删除,否则将删除失败。
    public static void deleteFolder(File folder) throws Exception {
        if (!folder.exists()) {
            throw new Exception("文件不存在");
        }
        File[] files = folder.listFiles();
        if (files != null) {
            for (File file : files) {
                if (file.isDirectory()) {
                    //递归直到目录下没有文件
                    deleteFolder(file);
                } else {
                    //删除
                    file.delete();
                }
            }
        }
        //删除
        folder.delete();

    }
  • 11
    点赞
  • 75
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值