Java的File类(Java基础复习归纳系列)

参考资料:THU 谌卫军教学PPT

目录

一、文件

什么是文件

文件的属性

目录

二、File类

File类的常用方法

File类的应用

1.遍历目录下的文件

2.删除文件及目录


一、文件

什么是文件

  • 文件是一种抽象机制,它提供了一种把信息保存在磁盘等存储设备上,并且便于以后访问的方法。

  • 在一个操作系统中,负责处理文件相关事宜的部分,称为文件系统

文件的属性

  • 每个文件都有一个名字和它所保存的信息,此外,OS还给每个文件附加了一些其他信息,这些信息称为文件的属性。
  • 常见的一些文件属性:
    1. 只读标志位:可读/写或只读
    2. 隐藏标志位:普通文件或隐藏文件
    3. 系统标志位:普通文件或系统文件
    4. 创建时间、最后访问时间、最后修改时间
    5. 文件长度
    6. 文件的创建者、保护信息等

目录

  • 目录(directory)也称文件夹(folder),它是一张表格,记录了在该目录下的每一个文件的文件名和其他的一些管理信息。
  • 一般情况下,每个文件占用该表格的某一行,即一个目录项;
  • 这张表格本身是以文件的形式存放在磁盘上;
  • 在目录的管理上,也有相关的系统调用,如:创建目录、删除目录、修改目录名等

目录的实现

二、File类

File类的常用方法

  • File类用于封装一个路径,该路径可以是从系统盘符开始的绝对路径,也可以是相对于当前目录而言的相对路径
  • File类内部封装的路径可以指向一个文件,也可以指向一个目录,在使用File类操作文件或者目录之前,首先得创建一个File对象。创建File对象的构造方法如下所示。

构造方法

File(String pathname)

通过将给定路径名字符串转换为抽象路径名来创建一个File 实例。

File(File parent, String child)

根据父路径抽象路径名和子路径路径名(包括文件名称)创建一个 File 对象。

File(String parent, String child)

根据父路径名字符串和子路径名(包括文件名称)字符串创建一个 File 对象。

File(URI uri)

通过将给定的 file: URI 转换为一个抽象路径名来创建一个新的 File 对象。

常用方法

原型

功能描述

String getName()

得到文件的名称(不包括路径)

String getPath()

得到文件的路径名

String getAbsolutePath()

得到文件的绝对路径名(在 UNIX 系统上,如果路径名的前缀是 "/",那么该路径名是绝对路径名。在Windows系统上,如果路径名的前缀是后跟 "\\" 的盘符,或者是 "\\\\",那么该路径名是绝对路径名)。

String getParent()

得到文件的上一级目录名

boolean renameTo(File dest)

将当前文件名修改为dest

boolean exists()

测试当前File对象所指示的文件是否存在

boolean canWrite()

测试文件是否可写

boolean canRead()

测试文件是否可读

boolean isFile()

判断当前文件是否是一个文件(而非目录)

boolean isDirectory()

判断当前文件是否是目录

boolean createNewFile()

检查File对象对应的文件是否存在,若不存在则创建该文件。创建成功返回true,否则返回false

long lastModified()

得到文件最近一次修改的时间(返回值用与时间点(1970 年 1 月 1 日,00:00:00 GMT)之间的毫秒数表示)

long length()

得到文件的长度,以字节为单位

boolean delete()

删除当前文件或目录。如果此路径名表示一个目录,则该目录必须为空才能删除。成功删除返回true,否则返回false。

String[] list()

列出当前目录下的文件

String[] list(FilenameFilter filter)

返回一个字符串数组,包含此路径中满足指定过滤器的文件和目录

File[] listFiles()

返回一个包含了File对象所有子目录和子文件的File数组

File类的应用

1.遍历目录下的文件

例:获取某个目录下指定类型的文件

list(FilenameFilter filter)方法的工作原理如下所示:

a、调用list()方法传入FilenameFilter文件过滤器对象

b、取出当前File对象所代表目录下的所有子目录和文件

c、对于每一个子目录或文件,都会调用文件过滤器对象的accept(File dir,String name)方法,dir - 被找文件所在的目录,name - 文件的名称。

d、如果accept()方法返回true,就将当前遍历的这个子目录或文件添加到数组中,如果返回false,则不添加。

import java.io.*;

public class TestFilenameFilter {

	public static void main(String[] args) throws Exception {
		// 创建File对象
		File file = new File("D:\\");
		// 创建过滤器对象
		FilenameFilter filter = new FilenameFilter() {
			@Override
			// 实现accept方法
			public boolean accept(File dir, String name) {
				File currFile = new File(dir, name);
				if (currFile.isFile() && name.endsWith("txt")) {
					return true;
				} else
					return false;
			}
		};
		if (file.exists()) {// 判断File对象对应的目录是否存在
			String[] lists = file.list(filter);// 获得过滤后的所有文件名数组
			for (String name : lists) {
				System.out.println(name);
			}
		}
	}
}

 

2.删除文件及目录

File类提供了delete()方法删除文件,但该方法无法删除非空目录,因此,要想删除文件及非空目录,需要通过递归的方式将整个目录以及其中的文件全部删除。

例:编写一个方法删除指定目录,不论其是否为空

import java.io.*;

public class DeleteDir {
	static int cntFile = 0;
	static int cntDir = 0;
	public static void main(String[] args) {
		File file = new File("D:\\test");
		deleteFileDir(file);
		System.out.println("删除成功,共删除"+cntFile+"个文件和"+cntDir+"个文件夹");
	}

	public static void deleteFileDir(File dir) {
		if (dir.exists()) {
			File[] files = dir.listFiles();//得到File数组
			for (File file : files) {//遍历所有的子目录和文件
				if (file.isDirectory()) {
					deleteFileDir(file);//如果是目录,就递归调用deleteFileDir()
				} else {
					file.delete();//如果是文件,直接删除
					cntFile++;
				}
			}
			// 删除完一个目录的所有文件,就删除这个目录
			dir.delete();
			cntDir++;
		}
	}
}

上例中定义了一个删除目录的静态方法deleteDir(),接收一个File类型的参数。在这个方法中,调用listFiles()方法把这个目录下所有的子目录和文件保存到一个File类型的数组files中,然后遍历files,如果是目录就重新调用deleteDir()方法进行递归,如果是文件就直接调用File的delete()方法删除。当删除完一个目录下的所有文件后,再删除当前这个目录,这样便从里层到外层递归的删除了整个目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值