目录
搜索文件或文件夹及应用
搜索某个文件或文件夹所在的路径
在某个盘符下搜索文件,如果是应用程序,将其打开
public class Test1 {
public static void main(String[] args) throws Exception {
searchFile(new File("D:/"), "QQ.exe");
}
public static void searchFile(File dir, String fileName) throws Exception {
if (dir == null || !dir.exists() || dir.isFile()) {
return; // 代表无法搜索
}
File[] files = dir.listFiles();
if (files != null && files.length > 0) {
for (File f : files) {
if (f.isFile()) {
//如果是文件夹的话将isFile替换为isDirectory
if (f.getName().contains(fileName)) {
System.out.println("找到了:" + f.getAbsolutePath());
//如果只是文件或文件夹可不执行以下操作
Runtime runtime = Runtime.getRuntime();
runtime.exec(f.getAbsolutePath());
}
} else {
searchFile(f, fileName);
}
}
}
}
}
删除某个文件夹,将文件夹中的内容全部清空后删除
删除非空文件夹时,优先遍历删除内部所有的文件,再将其删除,会使用到建议的递归思想.
public class Test2 {
public static void main(String[] args) {
deleteDir(new File("E:\\BB\\zhanghan"));
}
public static void deleteDir(File src){
//若不知道是否为空,可以先判断一下
if (src == null || !src.exists() || src.isFile()) {
return; // 代表无法搜索
}
//返回指定路径下,所有File对象数组
File[] files = src.listFiles();
//遍历数组,得到每一个File对象
for (File file : files) {
//判断如果是文件,直接删除
if (file.isFile()){
file.delete();
}else {
//判断如果是文件夹,递归继续判断
deleteDir(file);
}
file.delete();
}
//遍历结束代表目标文件夹空了,删除src
src.delete();
}
}
统计某个文件夹中各类文件共有多少,并将其添加到map集合中
public class Test3 {
public static void main(String[] args) {
File file = new File("E:\\BB\\zhanghan");
//创建集合用于收集数据
HashMap<String, Integer> map = new HashMap<>();
count(map, file);
System.out.println(map);
}
public static void count(HashMap<String, Integer> map, File file) {
//将文件对象下所有的一级文件对象统计到一个集合中
File[] files = file.listFiles();
//遍历集合
for (File f : files) {
//判断是否为文件
if (f.isFile()) {
//获取对象名
String name = f.getName();
String[] fileNameArr = name.split("\\.");
//使用点号.作为分隔符,需要在点号前面加上反斜杠\进行转义,否则点号会被解析成正则表达式中的任意字符匹配符号,而不是作为分隔符使用。因此,使用点号作为分隔符时,需要在前面加上两个反斜杠\\进行转义.
if (fileNameArr.length == 2) {//必须等于2才行,不然有的分割为两个以上字符,其中包含不同的后缀,可能会导致结果出错
String endName = fileNameArr[1];
if (map.containsKey(endName)) {
Integer count = map.get(endName);
//包含文件后缀,将数字加一,并将其重新添加入集合中,将之前的数据覆盖
count++;
map.put(endName, count);
} else {
map.put(endName, 1);
}
}
} else {
count(map, f);
}
}
}
}