方法名称 | 说明 |
---|---|
public File(String pathname) | 通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。 |
public File(String parent, String child) | 从父路径名字符串和子路径名字符串创建新的 File实例。 |
public File(File parent, String child) | 从父抽象路径名和子路径名字符串创建新的 File实例。 |
举例
public class FileDemo {
public static void main(String[] args) {
// 方式一:根据字符串表示的路径,变成File对象
String str = "G:\\a.txt";
File f1 = new File(str);
System.out.println(f1);
// 方式二:根据父级路径【G:\】和子级路径【a.txt】
String parent = "G:\\";
String child = "a.txt";
File f2 = new File(parent, child);
System.out.println(f2);
// 方式三:把一个File表示的路径和字符串表示路径进行拼接
File fileParent = new File("G:\\");
String child2 = "a.txt";
File f4 = new File(fileParent, child2);
System.out.println(f4);
}
}
1、File的常见成员方法(判断、获取)
方法名称 | 说明 |
---|---|
public boolean isDirectory() | 判断此路径名表示的File是否为文件夹 |
public boolean isFile() | 判断此路径名表示的File是否为文件 |
public boolean exists() | 判断此路径名表示的File是否存在 |
public long length() | 返回文件的大小(字节数量)【获取KB:获取大小/1024】 |
public String getAbsolutePath() | 返回文件的绝对路径 |
public String getPath() | 返回定义文件时使用的路径 |
public String getName() | 返回文件的名称,带后缀 |
public long lastModified() | 返回文件的最后修改时间(时间毫秒值) |
2、File的常见成员方法(创建、删除)
方法名称 | 说明 |
---|---|
public boolean createNewFile() | 创建一个新的空的文件 |
public boolean mkdir() | 创建单级文件夹 |
public boolean mkdirs() | 创建多级文件夹 |
public boolean delete() | 删除文件、空文件夹 |
-
createNewFile
-
如果当前路径表示的文件是不存在的,则创建成功,方法返回true
-
如果当前路径表示的文件是存在的,则创建失败,方法返回false
-
如果父级路径不存在,则抛出异常IOException
-
创建的文件不一定有后缀
-
-
mkdir
-
windows 当中路径是唯一的,如果当前路径已经存在,则创建失败,返回false
-
mkdir方法只能创建单级文件夹,无法创建多级文件夹
-
-
mkdirs
-
既可以创建单级也可以创建多级,所以一般用mkdirs,但mkdirs底层用到了mkdir
-
-
delete
-
如果删除的是文件,则直接删除,不走回收站
-
如果删除的是空文件夹,则直接删除,不走回收站
-
如果删除的有内容的文件夹,则删除失败
-
3、File的常见成员方法(获取并遍历)
方法名称 | 说明 |
---|---|
public File[] listFiles() | 获取当前该路径下所有内容【包括隐藏内容】 |
listFiles
-
当调用者File表示的路径不存在时,返回null
-
当调用者File表示的路径是文件时,返回null
-
当调用者File表示的路径是一个空文件夹时,返回一个长度为0的数组
-
当调用者File表示的路径是一个有内容的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回
-
当调用者File表示的路径是一个有隐藏文件的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回,包括隐藏文件
-
当调用者File表示的路径是需要权限才能访问的文件夹时,返回null
方法名称 | 说明 |
---|---|
public static File[] listRoots() | 列出可用的文件系统根 |
public String[] list() | 获取当前该路径下所有内容 |
public String[] list(FilenameFilter filter) | 利用文件名过滤器获取当前该路径下所有内容 |
public File[] listFiles() | 获取当前该路径下所有内容 【掌握】 |
public File[] listFiles(FileFilter filter) | 利用文件名过滤器获取当前该路径下所有内容 |
public FIle[] listFiles(FilenameFilter filter) | 利用文件名过滤器获取当前该路径下所有内容 |
3.1、遍历硬盘查找文件
public class Test2 {
public static void main(String[] args) {
File file = new File("G:\\aaa");
havaAVI(file);
}
public static void havaAVI(File file) {
// 进入aaa 文件夹,而且要获取里面的所有内容
File[] files = file.listFiles();
// 遍历
if (files != null) {
for (File oldFile : files) {
// 依次表示 files里面的每一个文件或文件夹路径
if (oldFile.isFile()) {
String fileName = oldFile.getName();
if (fileName.endsWith(".doc")) {
System.out.println(oldFile);
}
} else {
// 如果是一个文件夹,则继续循环遍历
havaAVI(oldFile);
}
}
}
}
}
3.2、删除文件夹
/**
* 删除文件夹
* @param file 要删除的文件夹
*/
public static void deleteFiles(File file) {
// 得到所有文件
File[] files = file.listFiles();
// 遍历
for (File oldFile : files) {
if (oldFile.isFile()) {
oldFile.delete();
} else {
deleteFiles(oldFile);
}
}
file.delete();
}
3.3、统计文件夹大小
/**
* 统计文件夹大小
* @param file 要统计的文件夹
* @return 返回大小
*/
public static long getLen(File file) {
// 定义变量进行累加
long len = 0;
// 进入到file文件夹
File[] files = file.listFiles();
// 遍历数组
for (File oldFile : files) {
// 判断
if (oldFile.isFile()) {
// 把当前文件大小进行累加到 len
len += oldFile.length();
} else {
// 如果是文件夹
len += getLen(oldFile);
}
}
return len;
}
3.4、统计文件夹下各种类型文件的个数
public static HashMap<String, Integer> getCount(File file) {
File[] files = file.listFiles();
HashMap<String, Integer> countMap = new HashMap<>();
for (File f : files) {
if (f.isFile()) {
String fileName = f.getName();
// 获取文件的尾部信息
String[] arr = fileName.split("\\.");
if (arr.length >= 2) {
String endName = arr[arr.length - 1];
if (countMap.containsKey(endName)) {
// 已存在
int count = countMap.get(endName);
count++;
countMap.put(endName, count);
} else {
// 不存在
countMap.put(endName, 1);
}
}
} else {
// sonMap里面是子文件中每一种文件的个数
HashMap<String, Integer> sonMap = getCount(f);
// 遍历 sonMap 的键值对进行累加
Set<Map.Entry<String, Integer>> entries = sonMap.entrySet();
for (Map.Entry<String, Integer> entry : entries) {
String key = entry.getKey();
int value = entry.getValue();
if (countMap.containsKey(key)) {
int countKey = countMap.get(key);
countKey = countKey + value;
countMap.put(key, countKey);
} else {
countMap.put(key, value);
}
}
}
}
return countMap;
}