Java中File类的常用方法介绍

前言

最近在学习SpringBoot上传图片的过程中用到了获取当前工程路径的方法,突然发现自己对于File这个类还不是很熟悉,赶紧学习一下。结果发现,获取当前工程路径的方法根本不在File这个类下,当然你也可以通过File类获取,但是有点不够优雅。无奈,既然想到了File而且不会就顺带手的学习一下吧。

获取当前路径

这里还是先介绍一下怎么获取当前路径吧。

//方法一
String classpath = System.getProperty("user.dir");
//方法二
File file = new File("");
String absolutePath = file.getAbsolutePath();

得到的结果是:E:\CodeTest\Java\maven\blog

基本用法

1、构造一个File类,获取一些基本信息

//如果只给定一个路径的话,是以当前的 project 作为起始路径的
//如果是\\file则是以当前盘符为起始路径
File file = new File("a");
System.out.println(file.getAbsolutePath()); //根据给定的字符串构造出来一个绝对路径,不检查存在与否
System.out.println(file.getPath());  //得到最后一级目录或者文件的名称
System.out.println(file.getName());
System.out.println(file.length());  //得到文件大小

对应的输出如下:

E:\CodeTest\Java\maven\blog\a
a
a
0

2、判断给定的路径是否存在,以及是一个路径还是一个文件

File c = new File("c");
System.out.println(c.exists());  //判断文件是否存在
System.out.println(c.isFile());  //判断是否是一个文件
System.out.println(c.isDirectory());  //判断是否是一个文件夹

3、创建文件和文件夹

File d = new File("d");
boolean newFile = d.createNewFile();  //只会创建文件,所以传入的字符串不能是一个路径
System.out.println(newFile);

//创建单级目录,如果目录存在则返回false,亦即不用先判断在创建了,直接创建即可
//而且要注意,你输入什么就创建什么目录,例如 "d.txt",就会创建一个 d.txt的目录,不会推断你是想创建一个文本
boolean mkdir = d.mkdir();
System.out.println(mkdir);

//创建多级目录
File e = new File("d\\e");
boolean mkdirs = e.mkdirs();
System.out.println(mkdirs);

4、对当前目录的遍历,以及得到当前文件夹下的文件以及文件夹列表。

目录结构如下:
在这里插入图片描述

//对目录的遍历
//要求给定的必须是目录
File d = new File("d");
//只会遍历当前目录下的文件以及文件夹
String[] list = d.list();
assert null != list;
for (String s : list) {
    System.out.println(s);
}

System.out.println("=================");
//这个方法打印出全路径,这里的全路径分两种情况:
//1、绝对的全路径  2、以工程为根路径的全路径
File[] files = d.listFiles();
assert null!=files;
for (File file : files) {
    System.out.println(file);
}

结果如下:

c.txt
d.txt
e
f.pdf
=================
d\c.txt
d\d.txt
d\e
d\f.pdf

注意这里只获取当前路径下的文件和文件夹,如果子文件下的内容,需要递归遍历。
list()和listFiles()的区别就在于
list获取当前路径下的文件以及文件夹的名称,返回 String[]
listFiles()获取当前路径下的文件以及文件夹的绝对路经,返回 File[]

5、对当前目录遍历的同时过滤掉某些文件

目录结构:
在这里插入图片描述

File d = new File("d");
//文件过滤器的使用
//list(FilenameFilter)参数为一个函数式接口的过滤器
//这里我们只要以 .txt 结尾的文件
String[] list = d.list((dir, name) -> name.endsWith(".txt"));
assert null != list;
for (String s : list) {
    System.out.println(s);
}
System.out.println("============");
//listFiles(FilenameFilter)、listFiles(FileFilter)
//下面是对FileFilter的实现,返回以 文件夹以及以.txt结尾的文档(这里的文档也包括文件夹)
File[] files = d.listFiles(pathname -> (pathname.getName().endsWith(".txt") || pathname.isDirectory()));
for (File file : files) {
    System.out.println(file);
}

结果如下:看到把以.pdf结尾的文件过滤掉了

c.txt
d.txt
============
d\c.txt
d\d.txt
d\e

发布了141 篇原创文章 · 获赞 131 · 访问量 21万+

猜你喜欢

转载自blog.csdn.net/qq_41621362/article/details/105272040