File类
1 概述
java.io.File
类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作。
构造方法
package java.io;
public class File implements Serializable, Comparable<File>
{
//通过路径名字符串来创建 File实例
public File(String pathname);
//根据父路径和子文件名创建 File实例
public File(String parent, String child);
public File(File parent, String child);
//省略...
}
路径知识补充:
-
绝对路径:从盘符开始的路径
表示目录:
E:\work\2024-CoreJava
表示文件:
D:\briup\2024-CoreJava\Test01_File.java
-
相对路径:不从盘符开始,IDEA中相对路径相对于所在项目目录,开发中经常使用
表示目录:
com\briup\day20
表示文件:
Test01.Java
**案例:**使用绝对和相对路径,实例化File对象
package com.briup.chap11.test;
public class Test011_File {
public static void main(String[] args) {
// 文件路径名
String pathname = "D:\\aaa.txt";
File file1 = new File(pathname);
// 文件路径名
String pathname2 = "D:\\aaa\\bbb.txt";
File file2 = new File(pathname2);
// 通过父路径和子路径字符串
String parent = "D:\\aaa";
String child1 = "bbb.txt";
File file3 = new File(parent, child1);
// 通过父级File对象和子路径字符串
File parentDir = new File("D:\\aaa");
String child2 = "bbb.txt";
File file4 = new File(parentDir, child2);
}
}
}
注意:File对象能够关联文件系统中文件或目录。该文件或目录可以不存在。
2 使用
1)判断及路径相关
//判断文件或目录是否存在
public boolean exists();
//判断是否是文件
public boolean isFile();
//判断是否是目录
public boolean isDirectory();
//File绝对路径名字符串
public String getAbsolutePath();
//File文件构造路径
public String getPath();
//File文件或目录的名称
public String getName();
//File文件或目录的长度
public long length();
案例:
public static void main(String[] args) {
File f1 = new File("E:\\aaa\\readMe.pdf");
System.out.println("f1: " + f1);
System.out.println("文件是否存在: " + f1.exists());
System.out.println("------------");
//关联目录
File f2 = new File("E:\\briup");
System.out.println(f2);
System.out.println("是否存在: " + f2.exists());
System.out.println("是否为目录文件:" + f2.isDirectory());
System.out.println("是否为普通文件:" + f2.isFile());
System.out.println("目录长度: " + f2.length());
System.out.println("------------");
//关联文件
File f3 = new File(f2,"a.txt");
System.out.println("f3路径: " + f3.getPath());
System.out.println("f3绝对路径: " + f3.getAbsolutePath());
System.out.println("f3.getName: " + f3.getName());
System.out.println("------------");
//使用相对路径[项目目录] 构建 File对象
// 比如 D:\develop\idea-workspace\240626-CoreJava\
File f4 = new File("test.txt");
System.out.println("f4存在:" + f4.exists());
//getPath(): 返回 构造方法 传递的 路径
System.out.println("f4.getPath: " + f4.getPath());
System.out.println("f4绝对路径: " + f4.getAbsolutePath());
System.out.println("f4.getName(): " + f4.getName());
System.out.println("f4.length: " + f4.length());
}
运行效果:
注意:length()表示文件长度,如果File对象表示目录,则返回值不确定。
2)创建删除操作
//当且仅当具有该名称的文件不存在时,创建一个新的空文件
public boolean createNewFile();
//创建目录
public boolean mkdir();
//创建多级目录
public boolean mkdirs();
//文件或目录的删除
public boolean delete();
案例:
//创建目录及文件
public static void main(String[] args) throws IOException {
File f1 = new File("E:\\briup\\dir2");
System.out.println("dir2目录存在:" + f1.exists());
//创建 目录
boolean flag = f1.mkdir();
System.out.println("目录创建成功:" + flag);
//创建 文件
File f2 = new File(f1,"aaa.txt");
flag = f2.createNewFile();
System.out.println("创建aaa.txt: " + flag);
//删除目录 或 文件
flag = f1.delete();
System.out.println("删除非空目录: " + flag);
flag = f2.delete();
System.out.println("删除文件: " + flag);
//删除 空白目录
flag = f1.delete();
System.out.println("删除空白目录: " + flag);
}
注意:File对象.delete(),如果File对象表示目录,则该目录必须为空才能删除成功。
3)目录遍历操作
package java.io;
public class File implements Serializable, Comparable<File>
{
//省略...
//目录文件调用该方法,获取目录中所有子文件名,返回String数组
//其他文件调用该方法,返回null
public String[] list();
//目录文件调用该方法,获取目录中所有子文件,返回File数组
//其他文件调用该方法,返回null
public File[] listFiles();
//目录文件调用该方法,获取目录中符合筛选条件的子文件,返回File数组
//其他文件调用该方法,返回null
public File[] listFiles(FileFilter filter);
//省略...
}
案例:
准备目录D:\test
,放入各类文件,编码对该文件夹进行遍历。
public static void main(String[] args) {
//1.准备目录文件
String dirPath = "D:\\test";
File dirFile = new File(dirPath);
//2.获取目录中所有子文件名称,并遍历输出
String[] list = dirFile.list();
for (String s : list) {
System.out.println(s);
}
System.out.println("---------------");
//3.准备普通文件
String fileName = "readme.pdf";
File file = new File(dirFile,fileName);
//4.普通文件调用list返回null
String[] list2 = file.list();
System.out.println(list2);
System.out.println("---------------");
//5.获取目录中所有子文件对象,并遍历输出
File[] listFiles = dirFile.listFiles();
for (File f : listFiles) {
System.out.println(f);
}
System.out.println("---------------");
//6.使用文件过滤器,获取目录下所有普通文件,并遍历输出
File[] listFiles2 = dirFile.listFiles(new FileFilter() {
@Override
public boolean accept(File f) {
if(f.isFile())
return true;
return false;
}
});
for (File f : listFiles2) {
//输出文件名即可
System.out.println(f.getName());
}
}
输出结果: