前言
一、介绍
- File类的实例是 文件 或 目录 的路径名的抽象表示形式
- 一个File实例所表示的路径可能是个一个文件,也可能是一个目录
- 一个File实例所表示的路径名可能在磁盘上是存在的,也可能在磁盘上不存在
- File类提供了用于操作 文件 或 目录 的方法,但并不支持访问文件的内容
二、路径表示
- windows:正斜杠(/)
D:/io/file.txt
等于 双反斜杠(\)D:\\io\\file.txt
,这两种都可以 - linux:
/home/kimi/file.txt
,使用正斜杠表示
三、构造方法
1、给定路径名创建
- File(String pathname)
- pathname是相对路径:相对于当前类,
./file.txt
- pathname是绝对路径:
D:/io/file.txt
,推荐
- 一般我们会把文件放在项目的resources下:
String pathname=this.getClass().getResource("/file.txt").getPath()
String pathname=this.getClass().getResource("/file.txt").getPath();
File file=new File(pathname);
2、根据 parent路径名 和 child路径名创建
- File(String parent, String child)
File file=new File("D:/io","file.txt");
- 如果操作同一个目录下多个文件,则推荐这种,目录可以成定义常量供多处使用
3、根据 parent File 和 child路径名创建
- File(File parent, String child)
File mkdir=new File("D:/io");
File file=new File(mkdir,"file.txt");
- 先判断目录是否存在,再操作目录下的文件时,推荐使用
四、API
1、文件、目录是否存在
boolean exists()
2、是否为文件
boolean isFile()
3、是否为目录
boolean isDirectory()
4、是否为隐藏目录或隐藏文件
boolean isHidden()
5、是否可读
boolean canRead()
6、是否可写
boolean canWrite()
7、创建File的路径,是否为绝对路径
boolean isAbsolute()
8、获取表示File的绝对路径
String getAbsolutePath()
- 创建File时使用相对路径时,可能会需要获取File的绝对路径
9、获取目录名称或文件名称
String getName()
10、获取目录或文件的路径名
String getPath()
11、创建File的路径,是否为绝对路径
boolean isAbsolute()
12、获取文件长度
long length()
- File不存在返回0L
- 当File表示的是个文件,并且存在,返回以字节为单位的文件长度
- 当File表示的是个目录,并且存在,返回值无意义
13、获取父路径
String getParent()
14、获取父File表示
File getParentFile()
15、获取目录下的子目录名+文件名
String[] list()
if(mkdir.exists() && mkdir.isDirectory()){
System.err.println(Arrays.toString(mkdir.list()));
}
16、获取目录下的子目录+文件
File[] listFiles()
if(mkdir.exists() && mkdir.isDirectory()){
File[] fileArr=mkdir.listFiles();
for(File file:fileArr){
System.err.println(file.getName());
}
}
File[] listFiles(FilenameFilter filter)
File[] fileAr=mkdir.listFiles((file,name)->
"file.txt".equals(name)
);
File[] listFiles(FileFilter filter)
File[] fileArr=mkdir.listFiles(pathname->
"file.txt".equals(pathname.getName())
);
17、创建目录
boolean mkdir()
File mkdir=new File("D:/io/test");
if(!mkdir.exists()){
mkdir.mkdir();
}
18、创建多级目录
boolean mkdirs()
File mkdir=new File("D:/io/test");
if(!mkdir.exists()){
mkdir.mkdirs();
}
- io目录不存在则先创建io目录,然后在创建test目录
19、创建文件
boolean createNewFile()
File mkdir=new File("D:/io");
if(!mkdir.exists()){
mkdir.mkdirs();
}
File file=new File(mkdir,"file.txt");
if(!file.exists()){
file.createNewFile();
}
20、目录或文件重命名
boolean renameTo(File dest)
File mkdir=new File("D:/io");
if(mkdir.exists()){
mkdir.renameTo(new File("D:/test"));
}
File file=new File("D:/io/file.txt");
if(file.exists()){
file.renameTo(new File("D:/io/newFile.txt"));
}
21、删除
new File("D:/io/file.txt").delete();
new File("D:/io/test").delete();
public static void removeMultistageMkdir(File mkdir){
if(!mkdir.exists()){
return;
}
if(mkdir.isFile()){
mkdir.delete();
}else {
File[] files=mkdir.listFiles();
if(files.length==0){
mkdir.delete();
}else{
for(File file:mkdir.listFiles()){
removeMultistageMkdir(file);
}
mkdir.delete();
}
}
}