文件处理File类

Posted tunan-ki

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文件处理File类相关的知识,希望对你有一定的参考价值。

File类的常用方法

File类内部封装的路径可以指向一个文件,也可以指向一个目录,在File类中提供了针对这些文件或目录的一些常规操作。

File类的常用的构造方法:

        File(String pathname)
            根据将给定路径名字符串转换为抽象路径名来创建一个新File实例
            
        File(File parent,String child)
            根据parent抽象路径名和child路径名字符串创建一个新的File实例
            
        File(String parent,String child)
            根据parent路径名字符串和child路径名字符串创建一个新的File实例

File类的常用方法,用于判断文件是否存在、创建、删除文件/目录等

1.文件操作相关的方法

        public boolean createNewFile()   创建文件,如果文件存在,就不创建
        punlic boolean delete()    Java中的删除不走回收站,注意文件夹内不能包含文件或者文件夹

2.目录操作相关的方法

        public boolean mkdir() 创建文件夹,如果存在,就不创建
        public boolean mkdirs() 创建文件夹,可以递归创建
        public String[] list[]    列出File对象的所有子文件名和路径,返回String数组
        public File[] listFiles()  列出File对象的所有子文件和路径,返回File数组

3.文件检测相关的方法

        public boolean isDirectory()  判断是否目录
        public boolean isFile()    判断是否是文件
        public boolean exists()    判断是否可读
        public boolean canRead() 判断是否可读
        public boolean canWrite()    判断是否可写
        public boolean isHidden()    判断是否隐藏

4.基本获取功能

        public String getAbsolutePath()        获取绝对路径
        public String getPath()        获取相对路径
        public String getNamee()    获取名称
        public long lenght()    获取长度,字节数            
        public long lastModified()    获取最后一次修改时间,毫秒值
        需要格式化时间SimpleDateFormat()

5.重命名

        public boolean renameTo(File dest)
        如果路径名相同,就是改名
        如果路径名不同,就是改名剪切
        路径以盘符开始:绝对路径 H:        路径不以盘符开始:相对路径 xx.ma4

案 例:

public class Example01 {
    public static void main(String[] args) {
        File file = new File("example.txt");
        //获取文件名
        System.out.println("文件名是: "+file.getName());
        //获取文件的相对路径
        System.out.println("文件的绝对路径是:"+file.getAbsolutePath());
        //获取文件的绝对路径
        System.out.println("文件的相对路径是:"+file.getPath());
        //获取文件的父路径
        System.out.println("文件的父路径是:"+file.getParent());
        //判断文件是否可读
        System.out.println("文件是否可读:"+file.canRead());
        //判断文件是否可写
        System.out.println("文件是否可写:"+file.canWrite());
        //判断是否是一个文件
        System.out.println("是否是一个文件:"+file.isFile());
        //判断是否是一个目录
        System.out.println("是否是一个目录:"+file.isDirectory());
        //判断是否是一个绝对路径
        System.out.println("是否是一个绝对路径:"+file.isAbsolute());
        //得到文件最后修改时间
        System.out.println("文件的最后修改时间:"+file.lastModified());
        //得到文件的大小
        System.out.println("文件的大小:"+file.length());
        //是否成功删除文件
        System.out.println("是否成功删除文件:"+file.delete());
    }
}

遍历目录下的文件

list()方法用于遍历某个指定目录下的所有文件的名称,接下来通过一个案例来演示list()方法的用法

public class Example02 {

    public static void main(String[] args) {
        File file = new File("C:\Users\DELL\Desktop\JAVA课件");
        if(file.isDirectory()) {    //判断File对象对应的目录是否存在
            String[] list = file.list();    //获取目录下的所有文件的文件名
            for (String name : list) {
                System.out.println(name);
            }
        }
    }
}

过滤器的使用

File类中提供了一个重载的list(FilenameFilter filter)方法,该方法接受一个FilenameFilter类型的参数。FilenameFilter 是一个接口,被称作文件过滤器,当中定义了一个抽象方法accept(File dir,String name)。在调用list()方法时,需要实现文件过滤器FilenameFilter ,并在accept()方法中做出判断,从而获得指定类型的文件

public class Example01 {
    public static void main(String[] args) {
        File file = new File("C:\Users\DELL\Desktop\JAVA课件");
        //创建过滤器方法
        FilenameFilter filter = new FilenameFilter() {
            //实现accept()方法
            @Override
            public boolean accept(File dir, String name) {
                File currFile = new File(dir, name);
                //如果文件名以.md结尾返回true,否则返回false
                if(currFile.isFile() && name.endsWith(".md")) {
                    return true;
                }else {
                    return false;
                }
            }
        };
        if(file.exists()) {    //判断File对象对应的目录是否存在
            String[] lists = file.list(filter);        //获得过滤后的所有文件名的数组
            for (String name : lists) {        
                System.out.println(name);
            }
        }
    }
}

遍历所有目录下的文件

listFile()方法返回一个File对象数组,当对数组中的元素进行遍历时,如果元素中还有子目录需要遍历,则需要使用递归。接下来通过一个案例实现遍历指定目录下的文件

public class Example03 {
    public static void main(String[] args) {
        File file = new File("C:\usr");
        fileDir(file);        //调用fileDir()方法
    }
    private static void fileDir(File dir) {
        File[] files = dir.listFiles();        //获取表示目录下所有文件的数组
        for (File file : files) {            //遍历所有的子目录和文件
            if(file.isDirectory()) {
                fileDir(file);                //如果是目录就调用fileDir()方法,否则输出
            }
            System.out.println(file.getAbsolutePath());
        }
    }
}

删除文件及目录

在操作文件时经常要删除一个目录下的某个文件或者整个目录,这时需要使用File类的delete()方法

1.删除单个文件

public class Example01 {
    public static void main(String[] args) {
        File file = new File("D:\test");
        if(file.exists()) {
            file.delete();
            System.out.println("删除成功");
        }
    }
}

2.删除单个目录

public class Example02 {
    public static void main(String[] args) {
        File file = new File("D:\test");        //创建一个代表目录的File对象
        deleteDiir(file);            //调用deleteDir删除方法
    }
    private static void deleteDiir(File file) {
        if(file.exists()) {            //判断传入的File文件是否存在
            File[] listfile = file.listFiles();        //得到File数组
            for (File file2 : listfile) {        //遍历所有子目录和文件
                if(file.isDirectory()) {
                    deleteDiir(file2);        //如果是目录,递归调用deleteDiir()
                }else {
                    //如果是文件,直接删除
                    file2.delete();
                }
            }
        }
        //删除完最后一个目录里的所有文件后,就删除这个目录
        file.delete();
    }
}

需要注意的是,在Java中删除是从虚拟机直接删除而不走回收站,文件一旦删除就无法恢复,因此在进行删除操作的时候需要格外小心。

以上是关于文件处理File类的主要内容,如果未能解决你的问题,请参考以下文章

文件处理File类

#yyds干货盘点# C#中的File类

我的Android进阶之旅关于Android平台获取文件的mime类型:为啥不传小写后缀名就获取不到mimeType?为啥android 4.4系统获取不到webp格式的mimeType呢?(代码片段

我的Android进阶之旅关于Android平台获取文件的mime类型:为啥不传小写后缀名就获取不到mimeType?为啥android 4.4系统获取不到webp格式的mimeType呢?(代码片段

pycharm自定义代码模板

Java常用类--File类