文章目录
- 前言
- 一、介绍
- 二、路径表示
- 三、构造方法
- 1、给定路径名创建
- 2、根据 parent路径名 和 child路径名创建
- 3、根据 parent File 和 child路径名创建
- 四、API
- 1、文件、目录是否存在
- 2、是否为文件
- 3、是否为目录
- 4、是否为隐藏目录或隐藏文件
- 5、是否可读
- 6、是否可写
- 7、创建File的路径,是否为绝对路径
- 8、获取表示File的绝对路径
- 9、获取目录名称或文件名称
- 10、获取目录或文件的路径名
- 11、创建File的路径,是否为绝对路径
- 12、获取文件长度
- 13、获取父路径
- 14、获取父File表示
- 15、获取目录下的子目录名+文件名
- 16、获取目录下的子目录+文件
- 17、创建目录
- 18、创建多级目录
- 19、创建文件
- 20、目录或文件重命名
- 21、删除
前言
内容参考该作者的https://www.jianshu.com/u/425884ff9c2d java File类,且作者的原文章讲的更为详细
一、介绍
- 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()
//D:/io/file.txt
- 创建File时使用相对路径时,可能会需要获取File的绝对路径
9、获取目录名称或文件名称
String getName()
//new File("D:/io").getName() //io
//new File("D:/io/file.txt").getName() //file.txt
10、获取目录或文件的路径名
String getPath()
//new File("D:/io").getPath() //D:/io
//new File("D:/io/file.txt").getPath() //D:/io/file.txt
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())); //[file.txt, test]
}
16、获取目录下的子目录+文件
//1)所有
File[] listFiles()
if(mkdir.exists() && mkdir.isDirectory()){
File[] fileArr=mkdir.listFiles();
for(File file:fileArr){
System.err.println(file.getName());
}
}
//2)过滤
File[] listFiles(FilenameFilter filter)
//FilenameFilter匿名内部类,重写boolean accept(File dir,String name)
//dir目录名:io
//name文件或目录名:test、file.txt
File[] fileAr=mkdir.listFiles((file,name)->
"file.txt".equals(name)
);
//3)过滤
File[] listFiles(FileFilter filter)
//FileFilter匿名内部类,重写boolean accept(File pathname)
//pathname路径名:D:/io/test、D:/io/file.txt
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();
}
- 要保证父级目录(
D:/io
)是存在的
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、删除
//boolean delete()
//1、文件
new File("D:/io/file.txt").delete();
//2、目录,该目录必须为空,否则删除失败,返回false
new File("D:/io/test").delete();
/**
* 删除多级目录
*
* @param mkdir 目录
*/
public static void removeMultistageMkdir(File mkdir){
//not exists
if(!mkdir.exists()){
return;
}
if(mkdir.isFile()){ //file
mkdir.delete();
}else { //folder
File[] files=mkdir.listFiles();
if(files.length==0){
mkdir.delete();
}else{
//删除该目录的下级目录、文件
for(File file:mkdir.listFiles()){
removeMultistageMkdir(file);
}
//删除该目录
mkdir.delete();
}
}
}