Java基础-File类

File类概述
因为数据在硬盘上最常见的方式,就是文件。而文件本身有很多的属性,比如说:文件大小,是否可读,是否隐藏
等。那么,java为了方便我们对文件进行操作,就提供了File类供我们使用。

一个File对象,既可以表示一个文件,也可以用来表示文件夹。理解了这个,对之后学习File类有莫大的好处,最起码能一下看得出当前的file对象到底指的是目录(文件夹)还是文件。

File类的三个构造方法:
    A:File(String pathname):根据指定的路径创建File对象。
    B:File(String parent, String child):根据指定的父文件夹和子文件或者文件夹创建File对象
    C:File(File parent, String child):根据指定的父文件夹对象和子文件或者文件夹创建File对象

代码如下:
public class FileDemo {
    public static void main(String[] args) {
        // 方式1
        File file = new File("d:\\a.txt");
        File file2 = new File("d:\\aaa");

        // 方式2
        File file3 = new File("d:\\", "a.txt");
        File file4 = new File("d:\\", "aaa");

        // 方式3
        File file5 = new File("d:\\");
        File file6 = new File(file5, "a.txt");
        File file7 = new File(file5, "aaa");
    }
}
注意:执行这段代码后,并没有在创建出这些目录和文件夹。这三个构造方法的作用是,将各自的file对象,指向了各自的目录和文件。
要想创建出这些文件和目录,需要进一步操作。

File类的创建功能:
A:创建文件:public boolean createNewFile() — 创建文件,如果指定的文件不存在就创建,否则不创建
B:创建文件夹;
a:public boolean mkdir() — 创建指定的目录,如果目录已存在,就不创建
b:public boolean mkdirs() — 创建指定的目录,这个时候,可以创建多级目录,若父目录不存在,也一并创建
ps…绝对路径和相对路径
A:绝对路径:以盘符开始的路径,如:E:\0714深圳黑马基础班\day20
B:相对路径:不以盘符开始的路径,如:test\aaa

代码:
public class FileDemo {
    public static void main(String[] args) throws IOException {
        // 创建文件
        File file = new File("d:\\a.txt");
        System.out.println("createNewFile:" + file.createNewFile());

        // 创建文件 忘了写路径名称了,以当前项目路径所在路径为父目录
        File file2 = new File("a.txt");
        System.out.println("createNewFile:" + file2.createNewFile());

        // 创建目录
        File file3 = new File("aaa");
        System.out.println("mkdir:" + file3.mkdir());

        // 创建多级目录 如果想创建一个指定的目录或者文件,要求,父目录必须存在。
        // File file4 = new File("bbb\\ccc");
        // System.out.println("mkdir:" + file4.mkdir());

        // 解决方案:
        // File file5 = new File("bbb");
        // File file6 = new File(file5, "ccc");
        // System.out.println("mkdir:" + file5.mkdir());
        // System.out.println("mkdir:" + file6.mkdir());

        // 如果目录过多,这样做就太麻烦。肿么办呢?
        File file4 = new File("bbb\\ccc");
        System.out.println("mkdirs:" + file4.mkdirs());

        // 创建文件
        File file5 = new File("b.txt");
        System.out.println("mkdir:" + file5.mkdir());
    }
}

结果:
这里写图片描述
这里写图片描述
这里需要特别注意的一点时,在创建文件或者文件夹时,一定要明确自己需要的时什么,不要调用了错误的方法,造成一些比较隐蔽的错误。

File类的判断功能:
删除功能:
public boolean delete():既可以删除文件,也可以删除文件夹。取决于你使用的对象。

需要注意的地方:
    A:如果要删除的目录下还有内容,那么必须要先把所有内容删除干净后,才能删除该目录
    B:特别注意:Java语言的删除不走回收站。别乱删文件,到时欲哭无泪。

代码:
public class FileDemo {
    public static void main(String[] args) {
        // 需求:我要删除a.txt
        File file = new File("a.txt");
        System.out.println("delete:" + file.delete());

        // 需求:我要删除aaa
        File file2 = new File("aaa");
        System.out.println("delete:" + file2.delete());

        // 需求:我要删除bbb
        File file3 = new File("bbb");
        System.out.println("delete:" + file3.delete());
    }
}

结果:
这里写图片描述
分析:
最后一个结果为false,是因为在bbb目录下,还有一个ccc目录,必须先删除ccc目录以及ccc目录下所有内容,bbb才能被删除

File类的判断功能:
boolean exists():判断file对象是否存在
boolean isFile():判断file对象是否是文件
boolean isDirectory():判断file对象是否是文件夹
boolean isAbsolute():判断file对象是否是绝对路径
boolean canRead():判断file对象是否可读
boolean canWrite():判断file对象是否可写
boolean isHidden():判断file对象是否隐藏

这些判断功能,主要用在我们需要对文件夹遍历,遍历过程中,需要对文件或者文件夹进行一些操作时,判断,符合条件的,我们才进行实质性的操作
代码:
public class FileDemo {
    public static void main(String[] args) {
        File file = new File("a.txt");

        System.out.println("exists:" + file.exists());// true
        System.out.println("isFile:" + file.isFile());// true
        System.out.println("isDirectory:" + file.isDirectory());// false
        System.out.println("isAbsolute:" + file.isAbsolute());// false
        System.out.println("canRead:" + file.canRead());// true
        System.out.println("canWrite:" + file.canWrite());// true
        System.out.println("isHidden:" + file.isHidden());// false
    }
}

结果:
这里写图片描述
分析:
这里的结果,没有可比性,每个人的文件系统里面是否包含这些文件,决定这里的值。

File类的获取功能1:
String getAbsolutePath():绝对路径
String getPath():相对路径
String getName():文件名称
long length():文件大小,单位是字节
long lastModified():上次修改时间的毫秒值。
代码:

public class FileDemo {
    public static void main(String[] args) {
        // 需求:指向文件
        File file = new File("bbb\\ccc\\a.txt");

        System.out.println("getAbsolutePath:" + file.getAbsolutePath());
        System.out.println("getPath:" + file.getPath());
        System.out.println("getName:" + file.getName());
        System.out.println("length:" + file.length());
        System.out.println("lastModified:" + file.lastModified());

        Date d = new Date(file.lastModified());
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println(sdf.format(d));
    }
}

结果:
这里写图片描述

File类的获取功能2:
public static File[] listRoots():列出可用的系统文件根目录
public String[] list():返回的是指定目录下所有文件或者文件夹的名称数组
public File[] listFiles():返回的是指定目录下所有文件或者文件夹对象数组

这里的获取功能,可以用于遍历某个目录下的所有文件和文件夹,并输出需要的结果

代码:

public class FileDemo {
    public static void main(String[] args) {
        // public static File[] listRoots()
        // File[] rootArray = File.listRoots();
        // for (File root : rootArray) {
        // System.out.println(root);
        // }

        // 创建对象
        File file = new File("d:\\");

        // public String[] list()
        // String[] strArray = file.list();
        // for (String str : strArray) {
        // System.out.println(str);
        // }

        // public File[] listFiles()
        File[] fileArray = file.listFiles();
        for (File f : fileArray) {
            System.out.println(f.getName());
        }

    }
}

综合应用强调内容

需求:获取指定目录下指定后缀的文件名称:
        方法一:先获取指定目录下所有文件或者文件夹的File数组,然后再遍历的时候进行判断。满足条件的就输
                出该File的名称。
        方法二:直接获取指定目录下满足条件的String(File)数组。然后遍历数组即可。
    方法二相对比较方便,但是需要用到FileNameFilter文件名称过滤器类还有带参的list(filter)方法
            public String[] list(FileNameFilter filter)

代码:
public class FileDemo {
    public static void main(String[] args) {
        // 封装目录
        File file = new File("d:\\");

        // 获取满足条件的数组
        String[] strArray = file.list(new FilenameFilter() {
            @Override
            public boolean accept(File dir, String name) {
                // 判断是否是文件,是否是以.mp4结尾
                // System.out.println(dir + "---" + name);
                File file = new File(dir, name); // d:\我的文档
                boolean flag = file.isFile();
                boolean flag2 = name.endsWith(".mp4");
                return flag && flag2;
            }
        });

        // 遍历字符串数组
        for (String str : strArray) {
            System.out.println(str);
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值