Java – File文件
简介
File 对象表示一个路径,可以是文件路径、也可以是文件夹的路径,File 可以处理文件各种读写操作
构造函数
File 文件有三个基本构造函数分别如下
// 通过字符串定义文件路径
public File(String pathname);
// 通过父路径加文件名定义文件路径
public File(String parent, String child);
// 通过带有父路径的File对象和文件名定义文件路径
public File(File parent, String child)
File文件方法(判断和获取)
// 判断此路径名表示的 File 是否为文件夹
public boolean isDirectory();
// 判断此路径名表示的File是否为文件
public boolean isFile();
// 判断File文件是否存在
public boolean exists();
// 返回文件的大小(字节数)
public long length();
// 返回文件的绝对路径
public String getAbsolutePath();
// 返回定义文件时使用的路径
public String getPath();
// 返回文件的名称,带后缀
public String getName();
// 返回文件的最后修改时间(毫秒)
public long lastModified();
File文件方法(创建和删除)
// 创建一个新的空文件
public boolean createNewFile();
// 如果当前路径文件的文件是存在的,则在创建失败返回 false
// 当父级路径文件夹不存在,会抛出IO异常
// 创建单级文件夹
public boolean mkdir();
// 创建多级文件夹
public boolean mkdirs();
// 删除文件、空文件夹
public boolean delete();
// delete 方法默认只能删除文件和空文件夹,delete 方法直接删除不走回收站
// 如果删除的是有内容的文件夹,则删除失败
删除有内容的文件夹(包括多级文件夹)
如果我们要删除一个有内容的文件夹:
1.先删除文件夹里面所有的内容
2.再删除自己
public static void delete(File path){
File[] files = path.listFiles();
for (File file : files) {
if (file.isFile()){
file.delete();
}else {
delete(file);
}
}
// 最后再删除自己
path.delete();
}
File文件方法(获取和遍历)
// 获取当前该路径下所有内容
public File[] listFiles()
注意:
1.当调用者File表示的路径不存在时,返回 null
2.当调用者File表示的路径是文件时,返回 null
3.当调用者File表示的路径是一个空文件夹时,返回一个长度为0的File数组
4.当调用者File表示的路径是一个有内容的文件夹时,将里面所有文件和文件夹的路径方在File数组中返回
5.当调用者File表示的路径是一个有隐藏文件的文件夹时,将里面所有文件和文件夹的路径方在File数组中返回,包含隐藏文件
6.当调用者File表示的路径是需要权限才能访问的文件夹时,返回 null
其它遍历方法
// 列出可用的文件系统根
public static File[] listRoots();
// 获取当前该路径下所有内容(仅获取文件名或文件夹名)
public String[] list();
// 利用文件名过滤器获取当前该路径下所有内容
public String[] list(FilenameFilter filter);
// FilenameFilter 是一个接口,有一个函数式实现方法 accept
// 可以通过自定义的方式对遍历的文件进行过滤,返回 true 表示保留,false表示舍弃
// 获取当前该路径下所有内容
public File[] listFiles();
// 利用文件名过滤器获取当前该路径下所有内容
public File[] listFiles(FileFilter filter);
// FileFilter 是一个接口,有一个函数式实现方法 accept
// 可以通过自定义的方式对遍历的文件进行过滤,返回 true 表示保留,false表示舍弃
// 利用文件名过滤器获取当前该路径下所有内容
public File[] listFiles(FilenameFilter filter);
FileFilter 和 FilenameFilter 的区别在于接口回调方法中,FilenameFilter 接收的是 File对象,包含总路径,而FileFilter 只接收文件名。
示例:遍历文件
public static void main(String[] args) {
File f = new File("E:\\");
getAllFilesFromPath(f, "mp4");
}
public static void getAllFilesFromPath(File path, String suffix) {
File[] files = path.listFiles();
if (files != null) {
for (File file : files) {
if (file.isFile()) {
// 如果是文件
if (file.getName().endsWith(suffix)) {
System.out.println(file.getAbsoluteFile());
}
} else {
// 如果不是文件,那就是文件夹
getAllFilesFromPath(file, suffix);
}
}
}
}
统计文件类型数
public static Map<String, Integer> getDirFilesCount(File path) {
File[] files = path.listFiles();
HashMap<String, Integer> hm = new HashMap<>();
for (File file : files) {
if (file.isFile()) {
// 如果是文件
String[] fileSuffixs = file.getName().split("\\.");
String fileSuffix = fileSuffixs[fileSuffixs.length - 1];
if (hm.containsKey(fileSuffix)) {
// 存在这个类
int count = hm.get(fileSuffix);
hm.put(fileSuffix, ++count);
} else {
// 不存在这个类
hm.put(fileSuffix, 1);
}
} else {
// 如果是文件夹
Map<String, Integer> sonMap = getDirFilesCount(file);
Set<Map.Entry<String, Integer>> entries = sonMap.entrySet();
for (Map.Entry<String, Integer> entry : entries) {
if (hm.containsKey(entry.getKey())) {
Integer srcInt = hm.get(entry.getKey());
srcInt += entry.getValue();
hm.put(entry.getKey(), srcInt);
} else {
hm.put(entry.getKey(), 1);
}
}
}
}
return hm;
}
共有 0 条评论