File类

概述

  • java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作。

构造方法

public File(String pathname) :通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
public File(String parent, String child) :从父路径名字符串和子路径名字符串创建新的 File实例。 
public File(File parent, String child) :从父抽象路径名和子路径名字符串创建新的 File实例。
public class File_demo1 {
    public static void main(String[] args) {
        //绝对路径
        File file1 = new File("E:\\IdeaProjects\\basic-code\\IO_code\\src\\FileDemo\\File_demo1.java");
        System.out.println(file1.exists());

        //相对路径,默认为当前项目的路径:E:\IdeaProjects\basic-code\demo1.txt
        File file2 = new File("demo1.txt");
        //System.out.println(file2.getAbsolutePath());
        System.out.println(file2.exists());

        String parent = "E:\\IdeaProjects\\basic-code\\IO_code\\src\\FileDemo";
        String child = "File_demo1.java";
        File file3 = new File(parent,child);
        System.out.println(file3.exists());

        //下面这个常用,可以修改子路径,来获得父路径下的所有文件
        File parents = new File("E:\\IdeaProjects\\basic-code\\IO_code\\src\\FileDemo");
        File file4 = new File(parents,child);
        System.out.println(file4.exists());
    }
}
true
true
true
true

绝对路径和相对路径

  • 绝对路径:从盘符开始的路径,这是一个完整的路径。
  • 相对路径:相对于项目目录的路径,这是一个便捷的路径,开发中经常使用。

File类的创建功能

public boolean createNewFile() :当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。  
public boolean mkdir() :创建由此File表示的目录。 
public boolean mkdirs() :创建由此File表示的目录,包括任何必需但不存在的父目录。
public class File_Create {
    public static void main(String[] args) throws IOException {
        //创建文本文件
        File file1 = new File("Create_file.txt");
        System.out.println(file1.createNewFile());
        //创建文件夹
        File file2 = new File("文件夹");
        System.out.println(file2.mkdir());
        //创建多级文件夹
        File file3 = new File("aaa//bbb");
        System.out.println(file3.mkdirs());
    }
}

File类的重命名和删除功能

public boolean delete() :删除由此File表示的文件或目录。
public boolean renameTo(File dest):把文件重命名为指定的文件路径。
public class file_delete {
    public static void main(String[] args) {
        //创建File对象
        File file1 = new File("Create_file.txt");
        //将Create.txt文件修改为abc.txt
        System.out.println(file1.renameTo(new File("abc.txt")));
        //删除多级文件夹
        File file2 = new File("aaa//bbb");
        System.out.println(file2.delete());

    }
}

注意事项:

  • 重命名注意事项
    • 如果路径名相同,就是改名。
    • 如果路径名不同,就是改名并剪切。
  • 删除注意事项:
    • Java中的删除不走回收站。
    • 要删除一个文件夹,请注意该文件夹内不能包含文件或者文件夹。

File类的判断功能

* public boolean isDirectory():判断是否是目录。
* public boolean isFile():判断是否是文件。
* public boolean exists():判断是否存在。
* public boolean canRead():判断是否可读。
* public boolean canWrite():判断是否可写。
* public boolean isHidden():判断是否隐藏。
public class File_judge {
    public static void main(String[] args) {
        File file1 = new File("abc.txt");
        //判断是否为文件夹
        System.out.println(file1.isDirectory());
        //判断是否为文件
        System.out.println(file1.isFile());
        //设置文件为不可读
        file1.setReadable(false);
        System.out.println(file1.canRead());//因为Windows认为所有文件都可读
        //设置文件为不可写
        file1.setWritable(false);
        System.out.println(file1.canWrite());
        //判断文件是否隐藏
        System.out.println(file1.isHidden());
    }
}
false
true
true
false
false

File类的获取功能

* public String getAbsolutePath():获取绝对路径
* public String getPath():获取路径
* public String getName():获取名称
* public long length():获取长度。字节数
public class File_get {
    public static void main(String[] args) {
        File file1 = new File("abc.txt");
        File file2 = new File("E:\\IdeaProjects\\basic-code\\abc.txt");
        //获取绝对路径
        System.out.println(file1.getAbsolutePath());
        System.out.println(file2.getAbsolutePath());
        //获取构造方法里面传入的路径
        System.out.println(file1.getPath());
        System.out.println(file2.getAbsolutePath());
        //获取文件名称
        System.out.println(file1.getName());
        System.out.println(file2.getName());
        //获取文件长度
        System.out.println(file1.length());
        System.out.println(file2.length());

    }
}

E:\IdeaProjects\basic-code\abc.txt
E:\IdeaProjects\basic-code\abc.txt
abc.txt
E:\IdeaProjects\basic-code\abc.txt
abc.txt
abc.txt
33
33

File类的遍历

* public String[] list():获取指定目录下的所有文件或者文件夹的名称数组
* public File[] listFiles():获取指定目录下的所有文件或者文件夹的File数组 
public class File_list {
    public static void main(String[] args) {
        File dir = new File("E:\\IdeaProjects\\basic-code");
        //获取指定目录下的所有文件或者文件夹的名称数组
        String[] arr = dir.list();

        for (String s : arr) {
            System.out.println(s);
        }
		//获取指定目录下的所有文件或者文件夹的File数组 
        File[] list = dir.listFiles();
        for (File file : list) {
            System.out.println(file);
        }
    }
}

文件名称过滤器的概述及使用

* public String[] list(FilenameFilter filter)
* public File[] listFiles(FileFilter filter)
* 返回一个字符串数组,命名由此抽象路径名表示的目录中满足指定过滤器的文件和目录。 

练习:获取所有后缀名为.jpg的文件C:\Users\DELL-pc\Pictures

import java.io.File;
import java.io.FilenameFilter;
import java.util.Arrays;

public class File_Filter {
    public static void main(String[] args) {
        //获取所有后缀名为.jpg的文件C:\Users\DELL-pc\Pictures
        File file = new File("C:\\Users\\DELL-pc\\Pictures");

        String[] arr1 = file.list();
        for (String s : arr1) {
            if (s.endsWith(".jpg")) {
                System.out.println(s);
            }
        }
            File[] arr2 = file.listFiles();
            for (File file1 : arr2) {
                if (file1.isFile() && file1.getName().endsWith(".jpg")) {
                    System.out.println(file1);
                }
            }

            String[] arr3 = file.list(new FilenameFilter() {
                @Override
                public boolean accept(File dir, String name) {
                    File file1 = new File(dir, name);
                    return file1.isFile() && file1.getName().endsWith(".jpg");
                }
            });

            System.out.println(Arrays.toString(arr3));
        }
    }
Calvin Harris.jpg
Capital Cities.jpg
Nick Cannon.jpg
啥呀.jpg
头像.jpg
C:\Users\DELL-pc\Pictures\Calvin Harris.jpg
C:\Users\DELL-pc\Pictures\Capital Cities.jpg
C:\Users\DELL-pc\Pictures\Nick Cannon.jpg
C:\Users\DELL-pc\Pictures\啥呀.jpg
C:\Users\DELL-pc\Pictures\头像.jpg
[Calvin Harris.jpg, Capital Cities.jpg, Nick Cannon.jpg, 啥呀.jpg, 头像.jpg]

这种查询并不完善,只能遍历到当前文件夹,如果含有多级文件夹,就不能找到所有后缀名为.jpg的文件。

递归实现查找后缀名为.jpg的文件

import java.io.File;
import java.util.Arrays;

public class File_jpg {
    public static void main(String[] args) {
        File file = new File("C:\\Users\\DELL-pc\\Pictures");
        System.out.println(Arrays.toString(file.list()));
        getJpg(file);
    }

    public static void getJpg(File file){
        File[] arr = file.listFiles();
        if(arr != null){   //防止出现空指针异常
            for (File dir : arr) {
                if(dir.isFile() && dir.getName().endsWith(".jpg")){
                    System.out.println(dir);
                }else {
                    getJpg(dir);
                }
            }
        }
    }
}

空指针原因:

  • 1、因为遍历到C盘下的“System Volume Information”目录时,这是每个分区下都有的系统目录,用户没有访问权限调用listFiles方法会返回null。
  • 2、只要碰见空文件夹listFiles()方法就返回null,所以会报空指针异常。
    解决办法是if (arrf!=null)就行了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值