JavaSE
File类
1.学习目的
操作系统中需要存储的数据都是以文件形式存在的。
若想操作文件,则需要在java中描述这些文件。所以有了File类。
2.File类的概述
文件和目录路径名 的抽象表达形式。
- 一个File类对象 可以用来表示一个文件,或者一个目录
- 一个File类对象表示的仅仅是操作系统中 通过路径名 所指定的文件或目录
- 抽象表达形式
3.路径
- 绝对路径
绝对路径名是 完整的路径名 - 相对路径
相对路径名必须使用其他路径名的信息进行解释(不完整的路径)
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]);
}