File类总结

作者: 阿Q说代码 | 来源:发表于2019-03-05 14:59 被阅读13次

最近一直在忙项目,所以没有及时更新小知识,今天就为大家讲一下file的知识点。首先呢,我们需要了解文件路径的概念。文件路径就是文件在电脑中的位置,表示文件路径的方式有两种:相对路径和绝对路径。相对路径是指目标相对于当前文件的路径,例如:“./index.html”。绝对路径:从盘符开始的路径或者网址的全路径,例如“C:\windows\system32\cmd.exe”或者“https://blog.csdn.net/Qingai521”。

相对路径表示的方法:

  • ./ :代表文件所在的目录(可以省略不写)
  • ../ :代表文件所在的父级目录
  • ../../ :代表文件所在的父级目录的父级目录
  • / :代表文件所在的根目录
File构造方法

注意:File没有无参构造方法, 因为创建一个File对象必须要指向某个路径才行,而这个路径就是调用有参构造方法传入的。

File(String pathname):根据一个路径得到File对象。

File(String parent, String child):根据一个目录和一个子文件/目录得到File对象

File(File parent, String child):根据一个父File对象和一个子文件/目录得到File对象

代码演示:

public static void demo1() {
    File file = new File("F:\\double\\video\\today.avi");//绝对路径
    System.out.println(file.exists());  

    File file2 = new File("xxx.txt");   //相对路径 相对于项目而言
    System.out.println(file2.exists());

    File file3 = new File("yyy.txt");   //相对路径 相对于项目而言
    System.out.println(file3.exists());
}

public static void demo2() {
    String parent = "F:\\double\\video";
    String child = "today.avi";
    File file = new File(parent,child);
    System.out.println(file.exists());
}
        
public static void main(String[] args) {
    File parent = new File("F:\\double\\video");
    String child = "today.avi";
    File file = new File(parent, child);
    System.out.println(file.exists());
    System.out.println(parent.exists());
}
File创建功能

public boolean createNewFile():创建文件,如果存在这样的文件,就不创建了;

public boolean mkdir()//只会建立一级的文件夹;

public boolean mkdirs():创建文件夹,如果父文件夹不存在,会帮你创建出来;

代码演示:

public static void main(String[] args) throws IOException {
        File dir1 = new File("aaa");
        System.out.println(dir1.mkdir());//创建成功则返回true,如果该目录存在则返回false
        
        File dir2 = new File("bbb.txt");//这样写是可以的,文件夹也是可以有后缀的
        System.out.println(dir2.mkdir());//虽然传入的是"bbb.txt",但是创建的是文件夹
        
        File dir3 = new File("ccc\\ddd");
        System.out.println(dir3.mkdirs()); //创建多级目录
}
public static void demo() throws IOException {
    File file = new File("yyy.txt");
    System.out.println(file.createNewFile());//如果没有就创建,返回true

    File file2 = new File("zzz");
    //可以不写后缀,创建成功则返回true;如果文件已经存在 就返回false
    System.out.println(file2.createNewFile());
}
File删除功能

public boolean delete():删除文件或者文件夹

注意:Java中的删除不走回收站;要删除一个文件夹,请注意该文件夹内不能包含文件或者文件夹。

代码演示:

public static void main(String[] args) {
    File file1 = new File("yyy.txt");
    System.out.println(file1.delete());//删除文件
    
    File file2 = new File("aaa");
    System.out.println(file2.delete());//删除文件夹
    
    File file3 = new File("ccc");   //如果删除一个文件夹,那么文件夹必须是空的
    System.out.println(file3.delete());
}
File重命名功能

public boolean renameTo(File dest):把文件重命名为指定的文件路径

注意:如果路径名相同,就是改名;如果路径名不同,就是改名并剪切。

代码演示:

public static void demo() {
    File file1 = new File("ooo.txt");
    File file2 = new File("D:\\xxx.txt");
    System.out.println(file1.renameTo(file2));  //不同路径,剪切并改名;改名成功则返回true
}
File判断功能

public boolean isDirectory():判断是否是目录

public boolean isFile():判断是否是文件

public boolean exists():判断是否存在

public boolean canRead():判断是否可读

public boolean canWrite():判断是否可写

public boolean isHidden():判断是否隐藏

注意:windows系统认为所有的文件都是可读的;canWrite() 与windows系统文件的“只读”属性有关;isHidden() 与windows系统文件的“隐藏”属性有关

代码演示:

public static void main(String[] args) {
    File file = new File("zzz");
    file.setReadable(false);
    System.out.println(file.canRead());     //windows系统认为所有的文件都是可读的
    file.setWritable(true);
    System.out.println(file.canWrite());    //windows系统可以设置为不可写
    
    File file2 = new File("aaa.txt");
    System.out.println(file2.isHidden());   //判断是否是隐藏文件
    System.out.println(file.isHidden());
}

public static void demo() {
    File dir1 = new File("ccc");
    System.out.println(dir1.isDirectory()); //判断是否是文件夹
    
    File dir2 = new File("zzz");
    System.out.println(dir2.isDirectory());
    
    System.out.println(dir1.isFile());  //判断是否是文件
    System.out.println(dir2.isFile());
}
File获取功能
  • public String getAbsolutePath():获取绝对路径

  • public String getPath():获取路径

  • public String getName():获取名称

  • public long length():获取长度。字节数

  • public long lastModified():获取最后一次的修改时间,毫秒值

  • public String[] list():获取指定目录下的所有文件或者文件夹的名称数组

  • public File[] listFiles():获取指定目录下的所有文件或者文件夹的File数组

    注意:getPath() 获取的是构造方法里面传入的路径

代码演示:

public static void main(String[] args) {
    File dir = new File("F:/double/day/video");
    String[] arr = dir.list();      //获取F:/double/day/video下所有的文件和文件夹的名称
    
    for (String string : arr) {
        System.out.println(string);
    }
    
    File[] subFiles = dir.listFiles();
    
    for (File file : subFiles) {        //获取F:/double/day/video下所有的文件和文件夹对象
        System.out.println(file);
    }
}

public static void demo() {
    File file1 = new File("ccc.txt");
    File file2 = new File("D:\\double\\day\\ccc.txt");
    System.out.println(file1.getAbsolutePath());    //获取绝对路径
    System.out.println(file2.getAbsolutePath());
    
    System.out.println(file1.getPath());        //获取构造方法中传入路径
    System.out.println(file2.getPath());
    
    System.out.println(file1.getName());        //获取文件或者文件的名字
    System.out.println(file2.getName());
    
    System.out.println(file1.length());
    
    Date d = new Date(file1.lastModified());    //文件的最后修改时间
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
    System.out.println(sdf.format(d));
}
案例:获取指定目录下以.jpg结尾的文件

public static void main(String[] args) {
        File dir = new File("E:\\");
        //方法一
        File[] subFiles = dir.listFiles();  //获取e盘下所有的文件或文件夹对象
        for (File subFile : subFiles) {
            //判断是否是文件 判断文件的名字是否以.jpg结尾
            if(subFile.isFile() && subFile.getName().endsWith(".jpg")) {
                System.out.println(subFile);    //这样方法就只能获取到以.jpg结尾的文件
            }
        }
        
        //方法二
        String[] arr = dir.list(new FilenameFilter() {
            
            @Override
            public boolean accept(File dir, String name) {  
                //dir就是new File("E:\\")对象。name 就是E盘下每个文件和文件夹的名字
                File file = new File(dir, name);    //把E盘下每个文件名称封装成File对象
                return file.isFile() && file.getName().endsWith(".jpg");//判断E盘下每个文件对象 是否是文件 判断文件的名字是否以.jpg结尾
            }
        });
        
        for (String string : arr) {
            System.out.println(string);
        }
    }

文件名称过滤器的使用源码分析

public File{
    public String[] list(FilenameFilter filter) {   //filter接收我们传入的文件名称过滤器对象(也就是传入的匿名内部类)
        String names[] = list();    //获取this对象下所有的文件和文件夹的名字存到names[]数组中
        if ((names == null) || (filter == null)) {//判断文件过滤器是否为null
            return names;
        }
        //创建一个ArrayList集合,用来保存文件名称过滤器过滤出来的文件名称
        List<String> v = new ArrayList<>(); 
        for (int i = 0 ; i < names.length ; i++) {//遍历names[]数组
            if (filter.accept(this, names[i])) {//用传入的文件名称过滤器对象(也就是传入的匿名内部类)调用accept方法(就是匿名内部类中重写的方法),并且传入this和this对象下每个文件和文件夹的名字,看是否符合过滤器过滤条件
                v.add(names[i]);        //如果符合过滤器过滤条件 就添加到集合中
            }
        }
        return v.toArray(new String[v.size()]);//把集合转成数组并返回
    }
}

好了今天就先说到这了,明天继续。想了解更多学习知识,请关注微信公众号“阿Q说”,获取更多学习资料吧!你也可以后台留言说出你的疑惑,阿Q将会在后期的文章中为你解答。每天学习一点点,每天进步一点点。

相关文章

  • File类总结

    最近一直在忙项目,所以没有及时更新小知识,今天就为大家讲一下file的知识点。首先呢,我们需要了解文件路径的概念。...

  • JAVA_IO_File类总结

    JAVA File类总结 缺少案例 1 概述 File是“文件”和“目录路径名”的抽象表示形式。File直接继承O...

  • IDEA 遇到问题总结

    IDEA 遇到问题总结 1. File size exceeds configured limit 现象: 某个类...

  • io——File类

    一、File类 1、File类要点概述 File类直接父类为Object类; 一个File类对象,表示一个磁盘上的...

  • Java学习Day15

    今日学习内容总结 File类 递归 File类 绝对路径和相对路径 绝对路径:从盘符开始的路径,这是一个完整的路径...

  • 3/20day15_File类_递归_IO流_字节流

    复习 今日内容 File类 递归 IO流 字节流 File类 File类的作用 File类可以表示文件或者文件夹(...

  • 【004】2020.11.03 周二 --《Java数据的输入输

    File类 问题01:创建File类的三种方式 回答01: 1)File file = new File("/tm...

  • File与IO基础

    IO流的作用:持久化到磁盘 File类的使用 File类基本概念 文件和文件夹都是用File类来表示。 File类...

  • Java—File类详解及实践

    File类介绍 File类概述   File类是java.io包下代表与平台无关的文件和目录。File可以新建、删...

  • JavaSE总结(8)File类、递归

    一、java.io.File: 文件 file 用来存储数据 目录 directry 文件夹 用来区分文件 存储...

网友评论

    本文标题:File类总结

    本文链接:https://www.haomeiwen.com/subject/yrxouqtx.html