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();
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kimi-001

只想在有限的时间分享更多的知识

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值