File类学习笔记

File类

java.io.File类代表文件路径名和文件夹路径名/目录路径名,File类是一个与系统无关的类,任何系统都可以使用File类的方法。
file文件,directory文件夹/目录,path路径

1.File类的静态成员变量

File类有2组静态成员变量
第一组
static String pathSeparator 路径分隔符(与系统有关)
static char pathSeparatorChar 路径分隔符(与系统有关)
1)File.pathSeparator在windows系统中是; 在linux系统中是:
2)pathSeparator在源码里就是pathSeparatorChar + “”

第二组
static String separator 文件名称分隔符(与系统有关)
static char separatorChar 文件名称分隔符(与系统有关)
1)File.separator在windows里是反斜杠\ 在linux里是正斜杠/

路径不能写死
在windows里的路径 develop\a\a.txt
在linux里的路径会变成 develop/a/a.txt
结果出现在windows里能成功的,在linux会失败,所以要写成
“develop”+File.separator+“a”+File.separator+“a.txt”

2.绝对路径和相对路径

绝对路径
以盘符开始的路径,盘符是指C盘、D盘
举例:C:\user\demo\bin\python\a.py

相对路径
相对当前项目的根目录,路径可以简化书写
举例:
C:\user\demo\bin\python\a.py是绝对路径,C:\user\demo是当前项目的根目录,那么相对路径就是bin\python\a.py
注意
1)路径中不区分大小写
2)windows中文件名称分隔符是反斜杠\ 是转义字符,两个反斜杠\才代表一个普通的反斜杠

3.构造方法

— 构造方法1.File(String pathName)—
通过路径名,创建File对象
1)pathName可以是文件路径名,也可以是文件夹路径名
2)pathName可以存在,也可以不存在。因为创建File对象,只是把路径封装成File对象,并不考虑路径的真假情况。

举例1
File封装了文件路径,打印出来就是C:\Users\itcast\IdeaProjects\shungyuan\a.txt
1) 说明File类重写了Object的toString方法;
2)此时C:\Users\itcast\IdeaProjects\shungyuan路径下并没有a.txt,但是File对象仍能创建成功;
在这里插入图片描述
举例2
File封装了文件夹路径名,打印出来就是C:\Users\itcast\IdeaProjects\shungyuan
在这里插入图片描述
举例3
File对象封装了相对路径,打印出来是一个相对路径b.txt,此时相对的是当前的项目根目录
在这里插入图片描述
— 构造方法2.File(Stirng parent, String child) —
把路径分层了两部分,通过parent路径名和child路径名创建一个新的File对象。
参数: parent父路径,child是子路径

— 构造方法3.File(File parent, String path) —
父路径是个File类对象
在这里插入图片描述

4.File类的成员方法

4.1 获取的方法

4.1.1 getAbsolutePath()方法

方法1.public String getAbsolutePath()
获取File对象的绝对路径,返回的是字符串。
在这里插入图片描述
无论File对象本身是绝对路径的还是相对路径的,getAbsolutePath返回的都是绝对路径。

4.1.2 getPath()方法

方法2.public String getPath()
将File对象转成字符串。
在这里插入图片描述
如果File对象是绝对路径的,getPath返回的是绝对路径的字符串。
如果File对象是相对路径的,那么getPath返回的就是相对路径的字符串。

4.1.3 getName()方法

方法3.public String getName()
获取路径结尾的文件名/文件夹名
在这里插入图片描述

4.1.4 length()方法

方法4.public long length()
获取文件的大小
1)以字节为单位
2)文件夹没有大小,不能获取文件夹的大小。a文件夹显示的大小,不是文件夹的大小,而是里面文件的大小。
3)如果File对象的路径不存在,那么length方法返回0
在这里插入图片描述
举例1
获取1.jpg图片的大小,此时1.jpg图片是存在的,获取的结果是以字节为单位的
在这里插入图片描述
举例2
获取2.jpg图片的大小,此时2.jpg不存在,所以length方法返回0
在这里插入图片描述
举例3
获取a文件夹的大小,返回0,因为文件夹没有大小的概念
在这里插入图片描述

4.2 判断的方法

4.2.1 exist()方法

== 方法1.public boolean exists() ==
判断File表示的文件或目录是否真实存在
举例1.
在这里插入图片描述
打印true,此时File表示的路径真实存在。

举例2.
在这里插入图片描述
打印false,说明此时C:\Users\itcast\IdeaProjects\shung不存在

举例3.
在这里插入图片描述
相对路径也可以判断,打印true表示这个相对路径存在

举例4.
在这里插入图片描述
此时路径是相对路径,打印为false,表示此相对路径不存在。

4.2.2 isDirectory()方法 & isFile()方法

方法2.public boolean isDirectory()
判断File对象表示的是目录。
方法3.public boolean isFile()
判断File对象表示的是文件
注意:不管是isDirectory()方法还是isFile()方法,都有个前提,File中的路径得存在,否则返回false
举例1.错误示例
在这里插入图片描述
此时C:\Users\itcast\IdeaProjects\shung路径不存在,isDirectory()和isFile()方法都会返回fasle,所以要先用exists()方法判断路径是否真实存在。

举例2.正确示例
此时C:\Users\itcast\IdeaProjects\shung路径不存在
在这里插入图片描述
先用exists()判断路径是否真实存在,再用isDirectory()和isFIle()判断。

举例3.
此时C:\Users\itcast\IdeaProjects\shungyuan目录路径存在,isDirectory()是true,isFile()是false。
在这里插入图片描述
举例4
此时C:\Users\itcast\IdeaProjects\shungyuan\shungyuan.iml是存在的文件路径,那么isDirectory()就是false,isFIle()就是true。
在这里插入图片描述

4.3 创建/删除的方法

4.3.1 createNewFile()方法

方法1.public boolean createNewFile()
1.功能:当该名称的文件不存在时,创建新的空文件。
此方法只能创建文件,不能创建文件夹。
2.如果文件不存在,那么就创建文件,且返回true。如果文件存在,不会创建,返回false。
3.创建文件的路径必须存在,否则跑出异常。
举例1.
在这里插入图片描述
在绝对路径C:\Users\itcast\IdeaProjects\shungyuan\08_FileAndRecursion文件夹里创建1.txt文件,创建成功会打印true

举例2
在这里插入图片描述
在相对路径里创建一个2.txt文件,如果相对路径里原来没有2.txt,那么会创建成功,打印true。

举例3.错误示例
在这里插入图片描述
相对路径08_FileAndRecursion\新建文件夹,没有带文件后缀名,看似像一个目录的名字,但使用createNewFile()创建出来的不是文件夹,而是文件,只不过这个文件名字叫“新建文件夹”,没有指定文件类型。

举例4.错误示例
在这里插入图片描述
此时相对路径08_FileAndRecursi目录不存在,会跑出IOException

4.3.2 mkdir()方法&mkdirs()方法

public boolean mkdir()方法
功能:创建单级文件夹
返回值:
1.如果文件夹不存在,创建文件夹,返回true
2.如果文件夹存在,不创建文件夹,返回false
3.如果File构造方法中的路径不存在,返回false
此方法只能创建文件夹,不能创建文件

举例1
在这里插入图片描述
此时08_FileAndRecursion目录存在,但是aaa不存在,所以会在08_FileAndRecursion下创建aaa文件夹,并且打印true

public boolean mkdirs()方法
功能:可以创建单级文件夹,也可以创建多级文件夹

举例1
在这里插入图片描述
用mkdirs方法创建多级目录,此时可以把111、222、333、444多级目录都创建出来,而且打印true

举例2

File构造方法的路径看似是一个文件路径,但是创建出来的abc.txt其实是一个文件夹,这里是因为mkdirs不能创建文件,只能创建文件夹

举例3
在这里插入图片描述
08_F不存在,所以不会创建ccc文件夹。这里要看下打印的是true还是false?

4.3.3 delete方法

public boolean delete()
功能:既可以删除文件,也可以删除文件夹
返回值:
1.删除文件/文件夹成功,返回true
2.如果文件夹中有内容,不会删除文件夹,返回false
3.File构造方法中的路径不存在,也返回false

举例1
在这里插入图片描述
删除“新建文件夹”,此时这个文件夹存在,打印true

举例2.
在这里插入图片描述
删除abc.txt,如果abc.txt存在,则打印true

5.遍历目录

5.1 list()方法&listFiles()方法

public String[] list()
返回String数组,表示File目录中的所有子文件和子文件夹
共同的注意:
1.如果构造方法中的路径不存在,或者不是一个目录,都会抛出空指针异常;

举例1
在这里插入图片描述
打印08_FileAndRecursion目录下的文件和文件夹,打印出来有
在这里插入图片描述
但是文件夹111里面还有文件夹,所以遍历的只是第一层

举例2:错误示例
在这里插入图片描述
File里传入的不是目录,是文件1.txt,此时遍历文件会报空指针异常。
在这里插入图片描述

举例3:错误示例
在这里插入图片描述
08_Fi这个路径不存在,遍历这个路径会报空指针异常。
在这里插入图片描述

public File[] listFiles()
返回File数组,表示File目录中的所有子文件和子文件夹

举例1
在这里插入图片描述
listFiles()获取08_fileAndRecursion目录中的文件和文件夹,返回File数组,打印如下
在这里插入图片描述

5.2 实例:递归打印多级目录

举例1
在这里插入图片描述
这样写,只能打印出目录里的一层,无法打印多层。
所以要用isDirectory()方法判断当前的f是不是文件夹,如果是文件夹,还要递归调用getAllFile()方法。如果是文件,则直接打印。
所以getAllFile()方法要改写成如下样子。

public static void getAllFile(File dir) {
	System.out.println(dir); // 打印本目录名称
    File[] files = dir.listFiles();
    for(File f: files) {
    	if(f.isDirectory()) { 
    		// 如果是文件夹,则递归调用
    		getAllFile(f);
    	} else {
    		// 如果是文件,则打印
    		System.out.println(f);
    	}
    }
}

5.3 实例:搜索文件

要实现搜索目录下的java文件

public static void searchJavaFile(File dir) {
    File[] files = dir.listFiles();
    for(File f: files) {
    	if(f.isDirectory()) { 
    		// 如果是文件夹,则递归调用
    		searchJavaFile(f);
    	} else { // 如果是文件
    	    // 把file类型转成字符串
    	    方法1.String pathName = f.toString();
    	    方法2.String pathName = f.getName();
    	    方法3.String pathName = f.getPath();
    	    // 用String类中的endsWith()方法判断以.java结尾
    	    if(pathName.endsWith(".java")) {
    	    	System.out.println(f);
    	    }
    	}
    }
}
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值