一、File类的概述和构造方法
File:它是文件和目录路径名的抽象表示:
文件和目录可以通过File封装成对象;
File封装的对象仅仅是一个路径名。它可以是存在的,也可以是不存在的;
方法名 | 说明 |
File(String pathname) | 通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例 |
File(String parent, String child) | 从父路径名字符串和子路径名字符串创建新的 File实例 |
File(File parent, String child) | 从父抽象路径名和子路径名字符串创建新的 File实例 |
File file = new File("gkl");
File fileChild = new File("child");
二、绝对路径和相对路径
绝对路径:从盘符开始;
相对路径:相对当前项目下的路径;
三、Flie类的创建
方法名 | 说明 |
public boolean createNewFile() | 创建一个新的空的文件 |
public boolean mkdir() | 创建一个单级文件夹 |
public boolean mkdirs() | 创建一个多级文件夹 |
File file = new File("gkl");
File fileChild = new File("child");
//创建文件目录单级文件夹
boolean isSuccess = file.mkdir();
System.out.println(isSuccess);
file.createNewFile();
//创建子目录多级文件夹
boolean isSuccessChild = fileChild.mkdirs();
System.out.println(isSuccessChild);
四、File类删除功能
方法名 | 说明 |
public boolean delete() | 删除由此抽象路径名表示的文件或目录删除由此抽象路径名表示的文件或目录 |
删除目录时的注意事项:
delete方法直接删除不走回收站
如果删除的是一个文件,直接删除
如果删除的是一个文件夹,需要先删除文件夹中的内容,最后才能删除文件夹
package com.gkl.service;
import java.io.File;
public class FileDemo {
public void delete(File file) {
File[] files = file.listFiles();
for (File child : files) {
if (child.isDirectory()) {
System.out.println(child.getAbsolutePath());
//迭代找子目录
delete(child);
} else {
//删除文件
child.delete();
}
}
//再删除目录
file.delete();
}
public static void main(String[] args) {
FileDemo fileDemo = new FileDemo();
//通过递归迭代删除目录,gkl-2文件夹必须自己创建
fileDemo.delete(new File("D:\\gkl - 2"));
}
}
五、File类判断和获取功能
方法名 | 说明 |
public boolean isDirectory() | 测试此抽象路径名表示的File是否为目录 |
public boolean isFile() | 测试此抽象路径名表示的File是否为文件 |
public boolean exists() | 测试此抽象路径名表示的File是否存在 |
public String getAbsolutePath() | 返回此抽象路径名的绝对路径名字符串 |
public String getPath() | 将此抽象路径名转换为路径名字符串 |
public String getName() | 返回由此抽象路径名表示的文件或目录的名称 |
六、File类高级获取功能
方法名 | 说明 |
public File[] listFiles() | 返回此抽象路径名表示的目录中的文件和目录的File对象数组 |
listFiles方法注意事项:
当调用者不存在时,返回null
当调用者是一个文件时,返回null
当调用者是一个空文件夹时,返回一个长度为0的数组
当调用者是一个有内容的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回
当调用者是一个有隐藏文件的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回,包含隐藏内容
当调用者是一个需要权限才能进入的文件夹时,返回null
统计文件夹中的各类文件的数目:
package com.gkl.service;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
public class FileDemo {
Map<String, Integer> map = new HashMap<>();
public void censusEndFile(File file, String text) {
// File file = new File("D:\\gkl");
File[] files = file.listFiles();
for (File child : files) {
if (child.isDirectory()) {
//统计子目录
censusEndFile(child,text);
} else {
String fileName = child.getName();
if (fileName.endsWith(text)) {
//统计文件数
int num = 1;
if (map.containsKey(text)) {
num = map.get(text);
num += 1;
}
map.put(text, num);
}
}
}
}
public static void main(String[] args) {
FileDemo fileDemo = new FileDemo();
fileDemo.censusEndFile(new File("D:\\gkl"), "txt");
System.out.println(fileDemo.map);
}
获取磁盘的所有文件:
package com.gkl.service;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class FileDemo {
List<String> list = new ArrayList<>();
public List searchAllFile(File file) {
File[] files = file.listFiles();
if(files!=null){
for (int i = 0; i < files.length; i++) {
File child = files[i];
if (child.isDirectory()){
// System.out.println(child.getAbsolutePath());
searchAllFile(child);
}else {
//把文件名添加到List集合中
list.add(child.getName());
}
}
// for (File child : files) {
// if (child.isDirectory()) {
// System.out.println(child.getAbsolutePath());
// searchAllFile(child);
// } else {
// //把文件名添加到List集合中
// list.add(child.getName());
// }
// }
}
return list;
}
public static void main(String[] args) throws IOException {
FileDemo fileDemo = new FileDemo();
System.out.println(file.getName() + ":" + fileDemo.searchAllFile(new File("D:\\")));
}
}