File类

JavaSE

File类

1.学习目的

操作系统中需要存储的数据都是以文件形式存在的。
若想操作文件,则需要在java中描述这些文件。所以有了File类。

2.File类的概述

文件和目录路径名 的抽象表达形式。

  1. 一个File类对象 可以用来表示一个文件,或者一个目录
  2. 一个File类对象表示的仅仅是操作系统中 通过路径名 所指定的文件或目录
  3. 抽象表达形式

3.路径

  1. 绝对路径
    绝对路径名是 完整的路径名
  2. 相对路径
    相对路径名必须使用其他路径名的信息进行解释(不完整的路径)

Java中的java.io包中的类总是根据 当前用户目录 来解析相对路径名。
File类就存放在该包中。
此目录由系统属性 user.dir 指定,通常是 Java 虚拟机的调用目录。

String workingDirectory = System.getProperty("user.dir"); //获取系统属性user.dir。
System.out.println(workingDirectory);

4.路径表示

1.对于类 UNIX 平台,绝对路径名的前缀始终是 "/"。相对路径名没有前缀。表示根目录的绝对路径名的前缀为 "/" 且名称序列为空。
绝对路径: /home/zs/6379.conf
相对路径: zs/a.txt
根目录:  /

2.对于 Microsoft Windows 平台,包含盘符的路径名前缀由驱动器号和一个 ":" 组成。如果路径名是绝对路径名,还可能后跟 "\\“
绝对路径: e:\zs\a.txt
相对路径:没有盘符前缀  zs\a.txt

5.转义字符

输出字符 \
System.out.println('\\')   //输出 \ 。

6.File构造方法

1.
File(String pathname) // 创建一个由pathname字符串确定的文件或目录 的File对象
File file = new File("E:\\demo\\first\\a.txt");  //该路径的文件并不一定存在,所以说是一个抽象表达式。
//注:可能找不到或者无法加载主类。
//Javac  Java  两步,这个主要是在第二步,没有找到字节码文件class。classpath的module设置问题。
2.
//parent是指父目录路径的字符串
//child目录文件在父目录下的相对路径
File(String parent, String child) 
String parent = "e:\\demo";
File file = new File(parent, "first\\a.txt");
3.
//parent是指父目录的File对象
File(File parent, String child)
File parentDir = new File("e:\\", "demo\\first");
File file = new File(parentDir, "a.txt");

7.创建功能

创建文件
1. public boolean createNewFile()  //创建当前File对象表示的文件

File file = new File("e:\\demo\\first\\b.txt");
boolean newFile = file.createNewFile(); //需要抛出一个编译时异常
返回true则成功。
返回false则文件已经存在。
创建目录
2. public boolean mkdir() //创建当前File对象表示的目录

String parent = "e:\\demo";
File secondDir = new File(parent, "second");
boolean mkdir = secondDir.mkdir();
返回true则返回成功
返回false则目录已经存在或父目录不存在。

3. public boolean mkdirs()  //与2的区别是,如果所要创建的目录的父目录也不存在,都会一起创建。

File parent = new File("e:\\demo\\thirdth");
Firl meDir = new File(parent, "me");
boolean mkdirs = meDir.mkdirs();

8.删除功能

public boolean delete()  //删除指定的文件和目录,但目录必须为空才能把目录删除

File file = new File("e:\\demo\\first\\a.txt");
boolean delete = file.delete(); // 删文件比较简单

File notNullDir = new File("e:\\demo");
boolean delete = notNullDir.delete(); // 非空目录返回false,空目录返回true

9.重命名功能

public boolean renameTo(File dest)  //将当前File对象重命名为dest所表示的文件或目录名
//file 与 dest 在同一目录下
File file = new File("e:\\demo\\first\\a.txt");
File file1 = new File("e:\\demo\\first\\aaaa.txt");
boolean b = file.renameTo(file1); //a.txt 被重命名为 aaaa.txt。

//file 与 dest 不在同一目录下
File file = new File("e:\\demo\\first\\a.txt");
File file1 = new File("d:\\demo\\second\\aaaa.txt");
boolean b = file.renameTo(file1);
//重命名后a.txt移动到了second目录下,且被改名为aaaa.txt。(移动+重命名)

10.判断功能

1.
public boolean isFile()  //判断File对象是否为一个文件
public boolean isDirectory() //判断File对象是否为一个目录

File file = new File("e:\\demo");
boolean b = file.isFile();
System.out.print(file.isDirectory());

2.
public boolean exists()  //判断是否物理存在

3.
public boolean canRead()
public boolean canWrite()
public boolean isHidden()

11.获取功能

1.
public File getAbsolutePath()
public String getPath()
public String getName() 

File file = new File("first\\a.txt");   // 默认是接在user.dir的路径之后的
System.out.println(file.getAbsolutePath());  //获取绝对路径
System.out.println(file.getPath());   // first\a.txt (如果创建File时用绝对路径,则输出绝对路径)
System.out.println(file.getName());   // a.txt (包括后缀)
 "\\first\a.txt" JVM会自动补上盘符 --->  "e:\\first\a.txt"

2.
public long length() //返回文件长度,如果File表示一个目录则返回值不确定,如果是一个文件,则以字节为单位,若不存在该文件,则返回 0L

12.高级获取功能

public String[] list()
1. 返回一个字符串数组,其中为该目录的文件和子目录的名称
2. 若对象不是一个目录,则返回null
3. 每个字符串是一个文件名,而不是一条完整的路径。

File file = new File("e:\\demo\\first");
String[] list = file.list();
System.out.println(Arrays.toString(list));

public File[] listFile()
1. 返回一个抽象路径名数组,抽象路径名表示目录中的文件和目录,我们可以操作这些File
2. 如果File不是一个目录,则返回null
3. 目录本身及其父目录不包括在结果中

listFiles() + isFile() / isDirectory() + delete() ----> 递归删除非空目录

13.自定义条件获取File[]功能

// 描述过滤规则:满足accept则返回true,否则返回false。
// 判断指定的File对象是否满足条件
interface FileFilter{
 boolean accept(File pathname);
}
1. File[] listFiles(FileFilter filter) //获取当前目录中满足条件的文件和目录的File对象。 filter为FileFileter子类对象
//筛选出".txt"后缀的文件
File targetDir = new File("e:\\demo\\first");
FileFilter filter = new FileFilter() {
	@Override
	public boolean accept(File pathname) {
		if (pathname.isDirectory()) {
			return false;		
		}
		String name = pathname.getName();
		return name.endsWith(".txt");
	}
};
File[] files = targetDir.listFiles(filter);
System.out.println(Arrays.toString(files));

//listFiles(FileFilter) 是怎么使用过滤器
public static File[] findByCondition(File targetDir, FileFilter condition) {
	List<File> arr = new ArrayLis<>();
	//遍历
	File[] files = targetDir.listFiles();
	for(int i = 0; i < files.length(); ++i)
		if (condition == null || condition.accept(files[i])) {
			arr.add(files[i]);
	}
	//把ArrayList动态数组转化成一个对应类型的JVM原始数组
	return arr.toArray(new File[0]);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值