java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作。
构造方法
File 类代表磁盘中实际存在的文件和目录,通过以下构造方法创建一个File对象:
方法签名 | 说明 |
---|---|
File(File parent, String child) | 通过给定的父抽象路径名和子路径名字符串创建一个新的File实例 |
File(String pathname) | 通过将给定路径名字符串转换成抽象路径名来创建一个新File实例 |
File(String parent, String child) | 根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例 |
File(URI uri) | 通过将给定的 file: URI 转换成一个抽象路径名来创建一个新的 File 实例 |
通过路径构造 File 对象说明:File(String pathname)
- pathname:该路径可以以文件结尾,也可以以文件夹结尾
- 路径支持相对路径和绝对路径
- 创建File对象时,只是把字符串的路径封装为 File 对象,不考虑路径的存在与否
- 支持 Linux 和 Windows 两种路径格式传入,Windows 文件路径分隔符为 \,需要转义 \,如 C:\1.txt
File 类的静态常量:
- File.pathSeparator:路径分隔符,在Windows上是分号,在Linux上是冒号
- File.separator:名称分隔符,在Windows上是反斜杠 \,在Linux上是斜杠 /
注意事项:// 路径分隔符,在Windows下是";",在Linux系统下为":"
System.out.println("File.pathSeparator = " + File.pathSeparator);
// 文件名称分隔符,在Windows上为"\",在Linux上为"/"
System.out.println("File.separator = " + File.separator);
1、在写路径时,不要写成固定的“\”或“/”,而是使用 File.separator 进行分隔
2、路径不区分大小写
常用API
1、获取文件名:
String getName() | 获得文件的名称,不包括路径 |
---|---|
String getPath() | 获得文件的路径 |
String getAbsolutePath() | 获得文件的绝对路径 |
String getParent() | 获得文件的上一级目录名 |
2、文件属性测试:
boolean exists() | 测试当前File对象表示的文件是否存在 |
---|---|
boolean canWrite() | 测试当前文件是否可写 |
boolean canRead() | 测试当前文件是否可读 |
boolean isFile() | 测试当前文件是否是文件 |
boolean isDirectory() | 测试当前文件是否是目录 |
3、文件操作:
long lastModified() | 获得文件最后一次修改的时间 |
---|---|
long length() | 获得文件的长度,以字节为单位 |
boolean delete() | 删除当前文件,成功返回true,失败返回false |
boolean renameTo(File dest) | 将重新命名当前File对象所表示的文件,成功返回true,失败返回false |
文件创建测试:
public static File createTempFile(String prefix, String suffix, File directory) throws IOException
:在指定目录中创建一个新的空文件,使用给定的前缀和后缀字符串生成其名称,prefix 字符数要大于3,否则抛异常public static File createTempFile(String prefix, String suffix) throws IOException
:在默认临时文件目录中创建一个空文件,使用给定前缀和后缀生成其名称public boolean createNewFile() throws IOException
:当且仅当具有该名称(构造方法中的参数)的文件尚不存在时,创建一个新的空文件 ```java / 静态方法创建文件 / String prefix = “hello”; String suffix = “.txt”;
// 在临时文件夹创建文件:hello6060146720867515331.txt File temp1 = File.createTempFile(prefix, suffix);
// 指定文件的创建路径:hello1848373084835202184.txt File temp2 = File.createTempFile(prefix, suffix, new File(“/“));
/ 实例方法文件操作 / File file = new File(“/自定义.txt”); boolean newFile = file.createNewFile();
// 文件重命名 File rename = new File(“/重命名.txt”); boolean b = file.renameTo(rename);
// 删除创建的文件 boolean delete = temp1.delete(); boolean delete1 = temp2.delete(); boolean delete2 = rename.delete();
4、目录操作:
| boolean mkdir() | 创建当前File对象指定的目录(只能创建单级文件夹) |
| --- | --- |
| boolean mkdirs() | 创建当前File对象指定的目录(如果父目录不存在,会自动创建) |
| boolean delete() | 删除当前File对象指定的路径(该方法在硬盘直接删除,不经过回收站,谨慎删除) |
| boolean renameTo(File dest) | 重新命名此抽象路径名表示的文件 |
5、目录遍历:
| String[] list() | 返回当前目录下的文件和目录 |
| --- | --- |
| String[] list(FilenameFilter filter) | 返回当前目录下满足指定过滤器的文件和目录 |
| File[] listFiles() | 返回当前目录下的文件和目录,返回值是File数组 |
| File[] listFiles(FilenameFilter filter) | 返回当前目录下满足指定过滤器的文件和目录 |
注意事项:
- 上述方法中遍历的是构造方法中给出的目录,且会扫描目录中的所有文件和文件夹(**包括隐藏文件和文件夹**)
- 当构造方法中给出的**目录路径不存在或者路径不是一个目录时,会抛出空指针异常**
- 注意,扫描的仅为文件夹**一级目录下的文件和文件夹名**
文件过滤接口:
- FilenameFilter.accept(File pathname):测试指定路径名是否在某个路径列表中
- FileFilter.accept(File dir , String name):测试指定 dir 目录中是否包含文件名为 name 的文件
小案例:递归打印出指定目录下的所有的 .exe 文件
```java
public class Demo {
public static void main(String[] args) throws IOException {
print(new File("d:/installation"));
files.stream().forEach(e->{
System.out.println(e.getAbsolutePath());
});
}
private static List<File> files = new ArrayList<>();
private final static String EXE = new String(".exe");
private static void print(File file) {
if (file.isDirectory()) {
for (File listFile : Objects.requireNonNull(file.listFiles())) {
print(listFile);
}
} else if (file.isFile() && file.getName().endsWith(EXE)){
files.add(file);
}
}
}