文章目录

  • 前言
  • 一、介绍
  • 二、路径表示
  • 三、构造方法
  • 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类提供了用于操作 文件 或 目录 的方法,但并不支持访问文件的内容

二、路径表示

  1. windows:正斜杠(/)D:/io/file.txt 等于 双反斜杠(\)D:\\io\\file.txt,这两种都可以
  2. 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();
        }
    }
}