File基础
# File基础
# 概述
java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作。
# 构造方法
public File(String pathname):通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。public File(String parent, String child):从父路径名字符串和子路径名字符串创建新的 File实例。public File(File parent, String child):从父抽象路径名和子路径名字符串创建新的 File实例。- 构造举例,代码如下:
/**
* @ClassName FileDemo1
* @Date 2023/3/1 20:46
* @Author diane
* @Description 路径 File -- 构造方法
* - `public File(String pathname) ` :通过将给定的**路径名字符串**转换为抽象路径名来创建新的 File实例。
* - `public File(String parent, String child) ` :从**父路径名字符串和子路径名字符串**创建新的 File实例。
* - `public File(File parent, String child)` :从**父抽象路径名和子路径名字符串**创建新的 File实例。
* @Version 1.0
*/
public class FileDemo1 {
public static void main(String[] args) {
// 1. 根据字符串表示的路径, 变成File对象
// 第一个\ 代表转义字符
String str = "D:\\tmp\\1.txt";
File file = new File(str);
// D:\tmp\1.txt
System.out.println(file);
// 2. 父路径字符串+子路径字符串
// 这个是存储路径
String parent = "D:\\tmp";
// 这个是文件名
String son = "1.txt";
File file1 = new File(parent, son);
// D:\tmp\1.txt
System.out.println(file1);
// 3. 父路径+子路径字符串
File parentFile = new File(parent);
File file2 = new File(parentFile, son);
System.out.println(file2);
}
}
小贴士:
- 一个File对象代表硬盘中实际存在的一个文件或者目录。
- 无论该路径下是否存在文件或者目录,都不影响File对象的创建。
# 常用方法
# 获取功能的方法
public String getAbsolutePath():返回此File的绝对路径名字符串。public String getPath():获取定义文件时使用的路径。public String getName():返回由此File表示的文件或目录的名称。public long length():返回由此File表示的文件的长度。public long lastModified(): 返回文件的最后修改时间-(时间 毫秒值)方法演示,代码如下:
/** * @ClassName FileDemo2 * @Date 2023/3/1 20:56 * @Author diane * @Description 获取 的方法 * * - `public long length()` :返回由此File表示的文件的大小 * * - `public String getAbsolutePath() ` :返回此File的绝对路径名字符串。 * * - ` public String getPath() ` :获取定义文件时使用的路径。 * * - `public String getName()` :返回由此File表示的文件或目录的名称。 * * - `public long lastModified()`: 返回文件的最后修改时间-(时间 毫秒值) * * @Version 1.0 */ public class FileDemo3 { public static void main(String[] args) { // 1. 返回文件的大小 // 细节1: 这个方法只能获取 字节大小 // 如果单位要M,G, 可以不断的除 1024 // 细节2:这个方法无法获取文件夹的大小 String str = "D:\\tmp\\1.txt"; File file = new File(str); // 3 个字节 System.out.println(file.length()); String str1 = "D:\\tmp"; File file1 = new File(str1); // 0 System.out.println(file1.length()); // 2. 获取绝对路径 System.out.println(file.getAbsolutePath()); // 使用相对路径去创建File 对象 默认的根是 项目的路径 File file2 = new File("a.txt"); // D:\生活\学习\西电杭研院\代码库\java\Java基础\code\a.txt System.out.println(file2.getAbsolutePath()); // 3. 获取File 定义时的路径 // D:\tmp\1.txt System.out.println(file.getPath()); // a.txt System.out.println(file2.getPath()); // 4. 获取名字 // 1.txt -- 文件名称 System.out.println(file.getName()); // tmp -- 文件夹名称 System.out.println(file1.getName()); // 5. 获取文件最后修改时间 -- 返回 时间毫秒值 // 1677676136252 long time = file.lastModified(); System.out.println(time); // 将毫秒值转换成字符串表示的时间 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"); String date = simpleDateFormat.format(time); System.out.println(date); } }
API中说明:length(),表示文件的长度。但是File对象表示目录,则返回值未指定。
# 绝对路径和相对路径
- 绝对路径:从盘符开始的路径,这是一个完整的路径。
- 相对路径:相对于项目目录的路径,这是一个便捷的路径,开发中经常使用。
public class FilePath {
public static void main(String[] args) {
// D盘下的bbb.java文件
File f = new File("D:\\bbb.java");
System.out.println(f.getAbsolutePath());
// 项目下的bbb.java文件
File f2 = new File("bbb.java");
System.out.println(f2.getAbsolutePath());
}
}
输出结果:
D:\bbb.java
D:\idea_project_test4\bbb.java
# 判断功能的方法
public boolean exists():此File表示的文件或目录是否实际存在。public boolean isDirectory():此File表示的是否为目录。public boolean isFile():此File表示的是否为文件。
方法演示,代码如下:
/**
* @ClassName FileDemo2
* @Date 2023/3/1 20:56
* @Author diane
* @Description 判断的方法
* @Version 1.0
*/
public class FileDemo2 {
public static void main(String[] args) {
// 1. 对文件进行判断
String str = "D:\\tmp\\1.txt";
File file = new File(str);
System.out.println(file.isFile());
System.out.println(file.isDirectory());
System.out.println(file.exists());
//2. 对文件夹进行判断
String str1 = "D:\\tmp";
File file1 = new File(str1);
System.out.println(file1.isFile());
System.out.println(file1.isDirectory());
System.out.println(file1.exists());
// 3. 对不存在的文件进行判断
String str2 = "D:\\tmp\\2.txt";
File file2 = new File(str2);
System.out.println(file2.isFile());
System.out.println(file2.isDirectory());
System.out.println(file2.exists());
}
}
# 创建删除功能的方法
public boolean createNewFile():当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。public boolean delete():删除由此File表示的文件或目录。public boolean mkdir():创建由此File表示的目录。public boolean mkdirs():创建由此File表示的目录,包括任何必需但不存在的父目录。
方法演示,代码如下:
/**
* @ClassName FileDemo4
* @Date 2023/3/1 21:33
* @Author diane
* @Description 创建与删除方法
* - `public boolean createNewFile()` :当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。
* - `public boolean mkdir()` :创建由此File表示的目录。
* - `public boolean mkdirs()` :创建由此File表示的目录,包括任何必需但不存在的父目录。
* - `public boolean delete()` :删除由此File表示的文件或目录。
* @Version 1.0
*/
public class FileDemo4 {
public static void main(String[] args) throws IOException {
// 1. createNewFile 创建空文件
// 1.1 如果文件存在,则返回true;不存在,则返回false
// 1.2 如果父级路径不存在,那么方法会抛出异常 IOException
// 1.3 createNewFile 方法创建的一定是文件,如果路径不包含后缀名,则创建一个没有后缀名的文件
/* File file = new File("D:\\tmp\\2.txt");
System.out.println(file.createNewFile());*/
// 2. mkdir 创建文件夹
// 2.1 windows 中路径是唯一的,如果当前路径已经存在,则创建失败,返回false
// 2.2 mkdir 只能创建单级文件夹,无法创建多级文件夹; 所以后续我们都不会使用
/*File file = new File("D:\\tmp\\3\\1");
System.out.println(file.mkdir());*/
// 3. mkdirs 创建文件夹
// 3.1 mkdirs 可以创建多级文件夹,也可以创建单级文件夹
// key 所以,我们创建文件夹的话就用这个方法就好了
/*File file = new File("D:\\tmp\\3\\1");
System.out.println(file.mkdirs());*/
// 4. 删除文件 -- 删除不会放入回收站
// 4.1 有文件则删除,返回true
// 4.2 没有文件则不会删除,返回false
// 4.3 删除文件夹的时候,只能删除空文件夹; 当文件夹内有内容的时候,不能删除
File file1 = new File("D:\\tmp\\2\\1");
System.out.println(file1.delete());
}
}
API中说明:delete方法,如果此File表示目录,则目录必须为空才能删除。
# 目录的遍历
public File[] listFiles():返回一个File数组,表示该File目录中的所有的子文件或目录。public File[] listFiles(FilenameFilter filter):返回一个File数组,中间加一层过滤器,表示该File目录中的所有的子文件或目录。public File[] listFiles(FileFilter filter):返回一个File数组,中间加一层过滤器,表示该File目录中的所有的子文件或目录。.png)
- 只能获取当前文件夹下的所有文件和文件夹 ; 不能获取子文件夹的内容
/**
* @ClassName FileDemo4
* @Date 2023/3/1 21:33
* @Author diane
* @Description 获取当前路径下的内容 -- 以 File数组的形式返回
* - `public File[] listFiles()` :返回一个File数组,表示该File目录中的所有的子文件或目录。
* - `public File[] listFiles(FilenameFilter filter)` :返回一个File数组,表示该File目录中的所有的子文件或目录。
* - `public File[] listFiles(FileFilter filter)` :返回一个File数组,表示该File目录中的所有的子文件或目录。
* @Version 1.0
*/
public class FileDemo5 {
public static void main(String[] args) throws IOException {
String str = "D:\\tmp";
File file = new File(str);
// 1. listFiles() --- 获取File对象
// 只能获取当前文件夹下的所有文件和文件夹 ; 不能获取子文件夹的内容
File[] files = file.listFiles();
for (File file1 : files) {
System.out.println(file1);
}
// 2. listFiles(FilenameFilter filter)
File[] files1 = file.listFiles(new FilenameFilter() {
@Override
// dir 为父级路径 name 为文件或文件夹 名称
// 返回 true 表示保留这个文件;false 表示不保留这个文件
public boolean accept(File dir, String name) {
// 直接这样是不好的,如果有文件命名为 4.txt 则其也会读取到对应的文件夹;不符合只读取文件的初衷
return name.endsWith(".txt");
}
});
System.out.println(Arrays.toString(files1));
// 3. listFiles(FileFilter filter)
File[] files2 = file.listFiles(new FileFilter() {
@Override
// pathname 为完整的路径
// 返回 true 表示保留这个文件;false 表示不保留这个文件
public boolean accept(File pathname) {
// 更推荐使用这一种
return pathname.isFile() && pathname.getName().endsWith(".txt");
}
});
System.out.println(Arrays.toString(files2));
// pathname 为完整的路径
// 返回 true 表示保留这个文件;false 表示不保留这个文件
// 更推荐使用这一种 先判断是否是文件,然后判断后缀是否是.txt
File[] files3 = file.listFiles(pathname -> pathname.isFile() && pathname.getName().endsWith(".txt"));
System.out.println(Arrays.toString(files3));
}
}
小贴士:
调用listFiles方法的File对象,表示的必须是实际存在的目录,否则返回null,无法进行遍历。
public String[] list():返回一个String数组,表示该File目录中的所有子文件或目录。public String[] list(FilenameFilter filter):返回一个String数组,中间加一层过滤器,表示该File目录中的所有子文件或目录。
/**
* @ClassName FileDemo4
* @Date 2023/3/1 21:33
* @Author diane
* @Description 获取当前路径下的内容 -- 以 String数组的形式返回
* - `public String[] list()` :返回一个String数组,表示该File目录中的所有子文件或目录。
* - `public String[] list(FilenameFilter filter)` :返回一个String数组,中间加一层过滤器,表示该File目录中的所有子文件或目录。
* @Version 1.0
*/
public class FileDemo6 {
public static void main(String[] args) throws IOException {
String str = "D:\\tmp";
File file = new File(str);
// 1. list() --- 获取String类型
String[] list = file.list();
for (String s : list) {
System.out.println(s);
}
// 2. list(FilenameFilter filter)
String[] list1 = file.list(new FilenameFilter() {
@Override
// dir 为父级路径 name 为文件或文件夹 名称
// 返回 true 表示保留这个文件;false 表示不保留这个文件
public boolean accept(File dir, String name) {
File file1 = new File(dir, name);
return file1.isFile() && name.endsWith(".txt");
}
});
System.out.println(Arrays.toString(list1));
String[] list2 = file.list((dir, name) -> {
File file1 = new File(dir, name);
return file1.isFile() && name.endsWith(".txt");
});
System.out.println(Arrays.toString(list2));
String[] list3 = file.list((dir, name) -> new File(dir, name).isFile() && name.endsWith(".txt"));
System.out.println(Arrays.toString(list3));
}
}
上次更新: 2023 07 3
