zoukankan      html  css  js  c++  java
  • 详解 File类

    在讲解File类之前,本人先要讲解下 路径,因为我们对于文件的操作是离不开路径的:


    路径:

    请观看本人博文 —— 《详解 绝对路径与 相对路径》


    File类

    概述

    文件 或 目录(即文件夹)的抽象表现形式,
    我们通常可以通过使用File类来封装一个 文件 或 文件夹,以便我们对文件进行操作

    那么,现在,本人来展示下这个类的构造方法;

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

    那么,本人现在就来展示下这些构造方法的使用:

    package edu.youzg.about_io.about_file.core;
    
    import java.io.File;
    
    public class Test {
    
        public static void main(String[] args) {
            //File(String pathname)
            //通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。
    
            File file = new File("G:/Java/StudyForIO/test.txt");
            //一个父路径,一个子路径
            //File(String parent, String child)
            //根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。
            //父路径是个字符串形式的
            File file1 = new File("G:/Java/StudyForIO", "test.txt");
    
            //File(File parent, String child)
            //根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例
    
            File file2 = new File("G:/Java/StudyForIO");
            //父路径是个File形式
            File file3 = new File(file2, "test.txt");
        }
    
    }
    

    现在,本人来展示下 File类的 常用API

    创建功能

    • public boolean createNewFile():
      创建一个新的文件(返回true),
      如果存在这样的文件,就不创建了(返回false)
    • public boolean mkdir():
      创建文件夹(返回true),
      如果存在这样的文件夹,就不创建了 (返回false)
      (注意这个方法只能创建单层目录 ,如果创建多层目录得一层一层创建)
    • public boolean mkdirs():
      创建文件夹(返回true),
      如果父文件夹不存在,会帮你创建出来 可以创建多层目录 (返回true)
      (当然也可以创建单层目录)

    删除功能

    • public boolean delete():
      删除文件或者文件夹 (返回true),在回收站中无法找到
      (注意:删除文件夹时 这个文件夹必须是空文件夹
      如果这个文件夹里面有 文件/文件夹,则不能删除返回false))

    重命名/剪切 功能

    • public boolean renameTo(File dest):
      重命名功能 —— 当源文件目标文件 在同一目录下
      剪切 功能 —— 当源文件目标文件 不在同一目录下

    判断功能

    • public boolean isDirectory():
      判断是否是目录
    • public boolean isFile():
      判断是否是文件
    • public boolean exists():
      判断是否存在
    • public boolean canRead():
      判断是否可读
    • public boolean canWrite():
      判断是否可写
    • public boolean isHidden():
      判断是否隐藏
    • public boolean isAbsolute();
      判断是否使用的是绝对路径
    • public boolean canExecute();
      判断是否是可执行文件Linux系统下

    获取功能

    • public String getAbsolutePath():
      获取绝对路径
    • public String getPath():
      获取相对路径
    • public String getParent()
      返回此抽象路径名父目录的路径名字符串
      如果此路径名没有指定父目录,则返回 null
    • public File getParentFile()
      返回此抽象路径名父目录的抽象路径名
      如果此路径名没有指定父目录,则返回 null
    • public long getTotalSpace()
      返回此抽象路径名指定的分区大小
      (即:返回总容量 单位字节
    • public long getFreeSpace()
      返回此抽象路径名指定的分区中 未分配的字节数
      (即:返回剩余容量 单位字节
    • public String getName():
      获取名称
    • public long length():
      获取长度单位 字节
    • public long lastModified():
      获取最后一次的修改时间单位 毫秒值
    • public String[] list():
      获取指定目录下的 所有文件或者文件夹 的 名称数组
    • public File[] listFiles():
      获取指定目录下的 所有文件或者文件夹 的 File数组

    现在,本人来通过几个例子来展示下这些API的用法:

    例1:

    题:
    判断G测试图片 目录下是否有后缀名为.jpg的文件,如果有,就输出该文件名称

    package edu.youzg.about_io.about_file.core;
    
    import java.io.File;
    
    public class Test {
    
        public static void main(String[] args) {
            File file = new File("G:\测试图片");
    
            //思路:1.获取到 该目录下的所有文件或文件夹
            //2.遍历这个文件数组,判断它是不是文件,
            // 还要判断,它的后缀名,是不是.jpg结尾的
            File[] files = file.listFiles();
            for (File f : files) {
                if(f.isFile() && f.getName().endsWith(".jpg")){
                    System.out.println(f.getName());
                }
            }
        }
    
    }
    

    首先,本人来展示下G盘的测试图片文件夹下的目录:
    在这里插入图片描述
    那么,让我们来看一下运行结果:
    在这里插入图片描述
    上图证明,我们的代码是正确的!
    其实,File类还有一个非常好用的工具 —— 文件名称过滤器

    文件名称过滤器:

    那么,什么是 文件名称过滤器 呢?

    概述

    • public String[] list(FilenameFilter filter)
    • public File[] listFiles(FilenameFilter filter)

    那么,现在,本人分别使用这两种过滤器来实现例1的要求:
    解法①:

    package edu.youzg.about_io.about_file.core;
    
    import java.io.File;
    import java.io.FileFilter;
    import java.io.FilenameFilter;
    
    public class Test {
    
        public static void main(String[] args) {
            File file = new File("G:\测试图片");
            File[] files = file.listFiles(new FilenameFilter() {
                @Override
                //过滤符合条件
                public boolean accept(File dir, String name) {
                    System.out.println(dir+"==="+name);
                    File file1 = new File(dir, name);
                    if(file1.isFile()&&file1.getName().endsWith(".jpg")){
                        return  true;
                    }else{
                        return false;
                    }
                }
            });
    
            System.out.println("-----------------------------------------------");
    
            for (File file1 : files) {
                System.out.println(file1);
            }
        }
    }
    

    在这里插入图片描述
    可以看到,本人在输出.jpg文件之前,专门输出了"dir+"==="+name",就是为了告诉大家:
    用这个过滤器,想要该目录下的文件操作的话,就要使用构造方法,利用参数dir 和 name 去先构造相应的File类对象,才能对该目录下的文件进行操作。

    解法②:

    package edu.youzg.about_io.about_file.core;
    
    import java.io.File;
    import java.io.FileFilter;
    import java.io.FilenameFilter;
    
    public class Test {
    
        public static void main(String[] args) {
            File file = new File("G:\测试图片");
    
            File[] files = file.listFiles(new FileFilter() {
                @Override
                public boolean accept(File pathname) {
                    // System.out.println(pathname);
                    if(pathname.isFile()&&pathname.getName().endsWith(".jpg")){
                        return true;
                    }else{
                        return false;
                    }
    
                }
            });
    
            for (File file1 : files) {
                System.out.println(file1);
            }
        }
    
    }
    

    在这里插入图片描述

    那么,这个问题相信同学们已经学会了,本人再来给出一个例子:
    例2:

    题:判断G测试图片 目录下是否有后缀名为.jpg的文件,如果有,把它的后缀名改成.png

    package edu.youzg.about_io.about_file.core;
    
    import java.io.File;
    import java.io.FilenameFilter;
    
    public class Test {
    
        public static void main(String[] args) {
            File file = new File("G:\测试图片");
            File[] files = file.listFiles(new FilenameFilter() {
                @Override
                //过滤符合条件
                public boolean accept(File dir, String name) {
                    File file1 = new File(dir, name);
                    if(file1.isFile() && file1.getName().endsWith(".jpg")){
                        String newName = dir + "\" + name.substring(0, name.length() - 4) + ".png";	//拼接路径名称
                        file1.renameTo(new File(newName));	//重命名
                        return  true;
                    }else{
                        return false;
                    }
                }
            });
        }
    }
    

    那么,现在我们来看一下运行后的 G测试图片 目录:
    在这里插入图片描述
    上图可以清晰地看到,本人的代码达成了目标!

    那么,相信同学们已经对这个类的API的使用了解得差不多了
    现在,本人再来给出最后一个例子:
    例3:
    现在,本人在 G测试图片 目录下 建立多级文件夹,如下图所示:
    在这里插入图片描述

    题:删除 G测试图片 目录:

    package edu.youzg.about_io.about_file.core;
    
    import java.io.File;
    import java.io.FilenameFilter;
    
    public class Test {
    
        public static void main(String[] args) {
            File file = new File("G:\测试图片");
            removeDirection(file);
        }
    
        private static void removeDirection(File file) {
            File[] files = file.listFiles(new FilenameFilter() {
                @Override
                //过滤符合条件
                public boolean accept(File dir, String name) {
                    File file1 = new File(dir, name);
                    if(file1.isDirectory()){
                        removeDirection(file1);	//仍然是文件夹,继续递归
                    }
    
                    file1.delete();	//不是文件夹,是文件,直接删除
                    return true;
                }
            });
            file.delete();	//删除 G\测试图片 目录
        }
    
    }
    

    那么,本人来展示下运行后的G盘目录:
    在这里插入图片描述
    可以看到,G测试图片 目录这个含有多级目录的目录被我们删除了!

    那么有关File类的所有基本知识点就讲解完了。
    (本人“I/O流”总集篇博文链接:https:////www.cnblogs.com/codderYouzg/p/12418404.html

  • 相关阅读:
    软件测试工具
    Linux笔记
    Google Test
    字典dict()
    元组tuple 可迭代对象
    列表list
    一些总结
    format()
    列表list
    format() expandtabs() 输入表格数据
  • 原文地址:https://www.cnblogs.com/codderYouzg/p/12418454.html
Copyright © 2011-2022 走看看