java基础(十一):File

本文详细介绍了Java中的File类,包括文件和目录的创建、删除、重命名等操作,以及路径处理、权限判断、文件属性获取等功能。通过示例代码展示了File类在实际项目中的使用,如创建多级目录、遍历文件、删除文件等。同时提到了使用FilenameFilter和FileFilter进行文件过滤的方法。
摘要由CSDN通过智能技术生成

File

  • 包:java.io

  • 类:File

  • 概述:文件和目录路径名的抽象表示;文件夹 — > 目录

  • 路径:

    1. 绝对路径:

      Linux:根目录/ Windows: 盘符

      盘符或者从根目录开头,通过目录和文件以及路径分隔符组成的路径

    2. 相对路径:以当前所在路径为标准

      • . :当前目录
      • ..:上一级目录

      注意:idea中相对路径是相对当前项目所在路径而言

    3. 项目中会大量使用相对路径

  • 构造方法:

  • File(String pathname) :通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。

  • 重要方法:

  1. 创建功能

    • boolean createNewFile():创建文件; 如果指定的文件不存在并成功地创建,则返回 true;如果指定的文件已经存在,则返回 false

      注意: 该方法只能创建文件,不能创建目录;

    • boolean mkdir():创建此抽象路径名指定的目录。

      注意:该方法要求给定目录的父目录必须已经存在,且该方法只能创建单级目录

    • boolean mkdirs():创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。

      注意:可以创建单级目录也可以创建多级目录;如果是创建目录的功能,建议使用该方法

  2. 删除功能

    • boolean delete() :删除此抽象路径名表示的文件或目录

      注意:通过该方法删除文件或目录,无法撤销;必须先备份再删除。如果此路径名表示一个目录,则该目录必须为空才能删除

  3. 重命名

    • boolean renameTo (File dest):重新命名此抽象路径名表示的文件

      **注意:**如果父目录一致的话,则是重命名的功能;如果父目录不一致但文件名一致,则是剪切的功能;如果父目录不一致且文件名不一致,剪切之后重命名

    public class FileDemo1 {
        public static void main(String[] args) throws IOException {
            // 创建File对象
            File file = new File("D:\\Javase\\Day18\\src\\file.txt");
            // 输出file对象,重写toString(),当前file对象代表路径名称
            // 如果路径名不存在,编译运行并不会报错
            System.out.println(file);
    
            // 创建功能
            // createNewFile 只能创建文件,不能创建目录
            boolean flag = file.createNewFile();
            System.out.println(flag);  // 若文件已存在,打印false
            // mkdir 创建单级目录,给定目录的父目录必须已经存在
            // File file1 = new File("D:\\Javase\\Day18\\src\\cn\\ysu\\file\\fileTest");
            // System.out.println(file1.mkdir());
            // mkdirs 创建多级目录
             File file1 = new File("D:\\Javase\\Day18\\src\\aa\\cc");
             System.out.println(file1.mkdirs());
    
            // 删除功能
            System.out.println(file1.delete());
            // 通过该方法删除文件或者目录,无法撤销
            // 如果路径名表示一个目录,则该目录必须为空才能删除
    
            // 重命名
            file.renameTo(new File("D:\\Javase\\Day18\\test.txt"));
            // 如果父目录一致则是重命名,若不一样则为剪切的功能
        }
    }
    
  4. 判断功能

    • 权限判断:可读 — boolean canRead() 、可写 — boolean canWrite()、可执行 — boolean canExecute()
    • boolean exists():测试此抽象路径名表示的文件或目录是否存在。
    • boolean isAbsolute():测试此抽象路径名是否为绝对路径名。
    • boolean isDirectory():测试此抽象路径名表示的文件是否是一个目录
    • boolean isFile():测试此抽象路径名表示的文件是否是一个标准文件。
    • boolean isHidden():测试此抽象路径名指定的文件是否是一个隐藏文件。
  5. 获取功能

    • File getAbsoluteFile():返回此抽象路径名的绝对路径名形式。
    • String getAbsolutePath() :返回此抽象路径名的绝对路径名字符串。
    • String getName():返回由此抽象路径名表示的文件或目录的名称。
    • String getParent():返回此抽象路径名父目录的抽象路径名;如果此路径名没有指定父目录,则返回 null。
    • String getPath() :将此抽象路径名转换为一个路径名字符串。
    • long length():返回由此抽象路径名表示的文件的长度。
    • long lastModified() :返回此抽象路径名表示的文件最后一次被修改的时间。
    public class FileDemo2 {
        public static void main(String[] args) throws IOException {
            File file = new File("D:\\Javase\\Day18\\src\\test.txt");
            System.out.println(file.canRead());
            System.out.println(file.canWrite());
            System.out.println(file.canExecute());
            // exists()
            System.out.println(file.exists());  // true
            // 相对路径
            File file1 = new File(".\\Day18\\src\\a.txt");
            System.out.println(file1.isAbsolute());  // 判读是否为绝对路径,false
            System.out.println(file1.getAbsolutePath());   // D:\Javase\.
            System.out.println(file1.createNewFile());
            // 隐藏文件
            System.out.println(file1.isHidden());  // false
            // getAbsoluteFile()
            File file2 = file1.getAbsoluteFile();
            System.out.println(file2);
            System.out.println(file2.renameTo(new File("D:\\Javase\\Day18\\b.txt")));
            System.out.println(file2.exists());  // false
            // getName()
            // 本质是字符串操作
            System.out.println(file2.getName());  // a.txt
            // 相当于
            // String path = "E:\\file.txt";
            // int index = path.lastIndexOf("\\");
            // String fileName = path.substring(index+1);
            // System.out.println(fileName);
            // getParent()
            // 本质仍是字符串操作,不要求目录存在
            // 需要区分绝对路径和相对路径
            System.out.println(file2.getParent());  //D:\Javase\.\Day18\src
            // getParentFile()
            // 不检查目录是否存在
            File f = file2.getParentFile();
            System.out.println(f);  // D:\Javase\.\Day18\src
            // getPath()
            // 同样不检查路径是否存在
            String path = file2.getPath();
            System.out.println(path);  // D:\Javase\.\Day18\src
            // length()
            // 以字节计数,中文在GBK编码中占两字节,在UTF-8占三字节
            System.out.println(file2.length());  // 不存在则为0
            System.out.println(file.length());
            // lastModified(): 最后一次修改的时间
            long time = file.lastModified();
            Date date = new Date(time);
            String lastTime = new SimpleDateFormat("yyyy-MM-dd HH:mm").format(date);
            System.out.println(lastTime);
        }
    }
    
  6. 设置功能

    • boolean setReadOnly():标记此抽象路径名指定的文件或目录,从而只能对其进行读操作。
    • boolean setWritable(boolean writable): 设置此抽象路径名所有者写权限的一个便捷方法。
    • boolean setWritable(boolean writable, boolean ownerOnly) :设置此抽象路径名的所有者或所有用户的写权限。
    • boolean setLastModified(long time) :设置此抽象路径名指定的文件或目录的最后一次修改时间。
  7. 高级获取功能

    • String[] list():返回一个字符串数组,返回当前给定路径下子文件和目录的路径
    • File[] listFiles():返回一个File数组,这些路径名表示此抽象路径名表示的目录中的文件。

    示例:递归打印所有的文件名称 & 递归删除目录下所有内容

    public class FileDemo3 {
        public static void main(String[] args) {
            // 遍历打印 D:\BaiduNetdiskDownload 所有文件名称
            File file = new File("D:\\BaiduNetdiskDownload");
            printFileName(file);
            // 遍历删除D:\Javase\Day18\src\aa下的所有内容
            File file1 = new File("D:\\Javase\\Day18\\src\\aa");
            deleteAllFile(file1);
        }
        // 递归打印所有的文件名称
        public static void printFileName(File fileName){
            if (fileName == null  || fileName.isFile()){
                throw new NullPointerException("输入必须为文件");
            }
            File[] files = fileName.listFiles();
            for (File eachFile : files){
                if (eachFile.isFile()){
                    System.out.println(eachFile.getName());
                }
                if (eachFile.isDirectory()) {
                    printFileName(eachFile);
                }
            }
        }
        // 递归删除目录下所有的内容
        public static void deleteAllFile(File root){
            if (root == null || !root.exists()){
                throw new NullPointerException("输入路径错误");
            }
            if(root.isDirectory()){
                File[] files = root.listFiles();
                for (File eachFile : files){
                    deleteAllFile(eachFile);
                }
            }
            // 不管是文件还是目录,只要能干掉就干掉
            boolean flag = root.delete();
            if (flag){
                System.out.println(root + "删除成功");
            }
            else{
                System.out.println(root + "删除失败");
            }
        }
    
    }
    
  8. 过滤器

    • String[] list(FilenameFilter filter):返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中满足指定过滤器的文件和目录。

      1. FilenameFilter 接口:用于过滤文件名称
      2. FilenameFilter 接口中有一个accept方法,需要实现该方法 — 没有具体的实现类,通过匿名内部类实现
      3. 如果满足条件,则返回true,就会保留下来;如果不满足条件,则返回false,就会被过滤掉下来
    • File[] listFiles(FileFilter filter):返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。

    • File[] listFiles(FilenameFilter filter):返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。

    public class FileDemo4 {
        public static void main(String[] args) {
            File file = new File("D:\\Javase\\Day18\\src\\aa");
            // 构建匿名内部类
            String[] str = file.list(new FilenameFilter() {
                @Override
                public boolean accept(File dir, String name) {
                    // dir 当前文件所在目录的路径
                    // name 当前文件名称
                    // 只能判断单级目录
                    // System.out.println(dir+ "---" + name);
                    // 打印所有.txt文件
                    return name.endsWith(".txt");
                }
            });
            System.out.println(Arrays.toString(str));
    
            File[] files = file.listFiles(new FileFilter() {
                @Override
                public boolean accept(File pathname) {
                    String name = pathname.getName();
                    return name.endsWith(".txt");
                }
            });
            for(File eachFile : files){
                System.out.println(eachFile);
            }
        }
    }
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值