Java的 File类
- File类:
- 相关方法:
- 构造方法:
- 创建文件/目录:
- 重命名:
- 判断:
- 获取:
- 删除:
- 路径:
- 相关操作:
- 操作1:
- 目录存在:
- 一层级的目录不存在:
- 多层级的目录不存在:
- 操作2:
- 所有文件信息:
- 文件后缀名为txt:
- API的过滤器:
- 目录及子目录文件信息:
File类:
File是文件和目录路径名的抽象表示。
File类的对象可以表示文件:C:\Users\ouyang\Desktop\hhh.txt。
File类的对象可以表示目录路径名:C:\Users\ouyang\Desktop。
File只关注文件本身的信息(文件名、是否可读、是否可写…),而不能操作文件里面的内容。
File类 – 表示文件或文件夹,不能对文件里的数据进行操作。
对文件里的数据进行操作的是:IO流
相关方法:
File 方法:
该文件存放的绝对路径 String getAbsolutPath();
该文件的文件名 String getName();
该文件是否可写 boolean canWrite();
该文件是否可读 boolean canRead();
该文件是否为隐藏文件 boolean isHidden();
该文件的长度 int length();
该文件的最后修改时间 long lastModify();
public static void main(String[] args) {//创建file对象File file = new File("C:\\Users\\何小宝\\Desktop\\hhy.txt");System.out.println("获取文件路径:" + file.getAbsolutePath());System.out.println("获取文件名:" + file.getName());System.out.println("获取文件是否可读:" + file.canRead());System.out.println("获取文件是否可写:" + file.canWrite());System.out.println("获取文件是否隐藏:" + file.isHidden());System.out.println("获取文件大小(字节):" + file.length());//格式化日期SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");String datetime = sdf.format(file.lastModified());System.out.println("获取文件最后修改时间:" + datetime);}
构造方法:
方法 | 方法介绍 |
---|---|
File(File parent, String child) | 根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。 |
File(String pathname) | 通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。 |
File(String parent, String child) | 根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。 |
创建文件/目录:
方法 | 方法介绍 |
---|---|
boolean createNewFile() | 当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。 |
boolean mkdir() | 创建此抽象路径名指定的目录。 |
boolean mkdirs() | 创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。 |
重命名:
方法 | 方法介绍 |
---|---|
boolean renameTo(File dest) | 重新命名此抽象路径名表示的文件。 |
判断:
方法 | 方法介绍 |
---|---|
boolean isDirectory() | 测试此抽象路径名表示的文件是否是一个目录。 |
boolean isFile() | 测试此抽象路径名表示的文件是否是一个标准文件。 |
boolean isHidden() | 测试此抽象路径名指定的文件是否是一个隐藏文件。 |
boolean canRead() | 测试应用程序是否可以读取此抽象路径名表示的文件。 |
boolean canWrite() | 测试应用程序是否可以修改此抽象路径名表示的文件。 |
获取:
方法 | 方法介绍 |
---|---|
File getAbsoluteFile() | 返回此抽象路径名的绝对路径名形式。 |
String getAbsolutePath() | 返回此抽象路径名的绝对路径名字符串。 |
String getName() | 返回由此抽象路径名表示的文件或目录的名称。 |
String getParent() | 返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null。 |
File getParentFile() | 返回此抽象路径名父目录的抽象路径名;如果此路径名没有指定父目录,则返回 null。 |
String getPath() | 将此抽象路径名转换为一个路径名字符串。 |
long lastModified() | 返回此抽象路径名表示的文件最后一次被修改的时间。 |
long length() | 返回由此抽象路径名表示的文件的长度。 |
String[] list() | 返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。 |
String[] list(FilenameFilter filter) | 返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中满足指定过滤器的文件和目录。 |
File[] listFiles() | 返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。 |
删除:
方法 | 方法介绍 |
---|---|
boolean delete() | 删除此抽象路径名表示的文件或目录。 |
路径:
相对路径:相对于当前项目下的路径。
绝对路径:从根目录开始的完整路径,包含了文件系统中该文件或目录,所在的完整路径,通常以根目录符号(如 Linux 中的“/”,Windows 中的“C:\”)开始。
public static void main(String[] args) {File file = new File("file.txt");//使用的是相对路径System.out.println(file.length());//C:\wenjian\file.txtSystem.out.println("绝对路径:" + file.getAbsolutePath());//file.txtSystem.out.println("相对路径:" + file.getPath());}
相关操作:
操作1:
通过程序,判断指定路径的文件是否存在,如果不存在,则创建该文件。
下面按各种情况来解决该问题:
目录已存在的情况。
有一个层级的目录不存在的情况。
有多个层级的目录不存在的情况。
目录存在:
//目录已存在的情况
public static void main(String[] args) throws IOException {File file = new File("file01\\hhh.txt");//判断文件是否存在if(!file.exists()){//文件不存在//创建文件file.createNewFile();}}
一层级的目录不存在:
//有一个层级的目录不存在的情况
public static void main(String[] args) throws IOException {//C:\wenjian\file01\hhh.txtFile file = new File("file01\\hhh.txt");//获取父路径 -- C:\wenjian\file01File parentFile = file.getParentFile();//判断父路径是否存在if(!parentFile.exists()){//创建一层目录parentFile.mkdir();}//判断文件是否存在if(!file.exists()){//创建文件file.createNewFile();}}
多层级的目录不存在:
//有多个层级的目录不存在的情况
public static void main(String[] args) throws IOException {//C:\wenjian\file01\file02\file03\hhh.txtFile file = new File("file01\\file02\\file03\\hhh.txt");//获取父路径 -- C:\wenjian\file01\file02\file03File parentFile = file.getParentFile();//判断父路径是否存在if(!parentFile.exists()){//创建多层目录parentFile.mkdirs();}//判断文件是否存在if(!file.exists()){//创建文件file.createNewFile();}}
操作2:
输出指定目录下的所有文件信息,比如打印当前项目根目录下的所有文件信息(只考虑当前目录,不考虑子目录)。
要求只输出文件后缀名为txt的文件。
根据API的过滤器来完成该功能。
需求继续跟进,列出当前目录及子目录中符合该条件的文件信息(递归)。
所有文件信息:
//输出指定目录下的所有文件信息
public static void main(String[] args) {File file = new File("D:\\2023");//获取当前目录下所有文件及文件夹的名字
// String[] list = file.list();
// for (String fileName : list) {
// System.out.println(fileName);
// }//获取当前目录下所有的file对象File[] listFiles = file.listFiles();//获取当前目录下所有的文件及文件夹的file对象for (File f : listFiles) {//可以输出file对象相关的方法System.out.println(f.getName() + " -- " + f.canRead() + " -- " + f.canWrite());}}
文件后缀名为txt:
//要求只输出文件后缀名为txt的文件
public static void main(String[] args) {File file = new File("D:\\2023");//获取当前目录下所有文件及文件夹的名字
// String[] list = file.list();
// for (String fileName : list) {//能输出文件夹
// if(fileName.endsWith(".txt")){
// System.out.println(fileName);
// }
// }//获取当前目录下所有的file对象File[] listFiles = file.listFiles();//获取当前目录下所有的文件及文件夹的file对象for (File f : listFiles) {//文件名字String fileName = f.getName();//判断f是否是文件if(f.isFile() && fileName.endsWith(".txt")){System.out.println(fileName);}}}
API的过滤器:
//根据API的过滤器来完成该功能
public static void main(String[] args) {File file = new File("D:\\2023");//过滤器,过滤你不想要的内容,留下你想要的内容。String[] list = file.list(new FilenameFilter() {@Overridepublic boolean accept(File dir, String name) {File childFile = new File(dir, name);if(childFile.isFile() && childFile.getName().endsWith(".txt")){return true;}return false;}});for (String fileName : list) {System.out.println(fileName);}}
目录及子目录文件信息:
//需求继续跟进,列出当前目录及子目录中符合该条件的文件信息(递归)
public static void main(String[] args) {File file = new File("D:\\2023");fileHandler(file, ".txt");}public static void fileHandler(File file,String suffix){File[] listFiles = file.listFiles();for (File f : listFiles) {if(f.isFile()){//文件String name = f.getName();if(name.endsWith(suffix)){System.out.println(name);}}else if(f.isDirectory()){//文件夹fileHandler(f, suffix);}}}