因为file类中的delete方法只能删除文件或空文件夹,不能删除有内容的文件夹,所以写一个方法直接删除有内容的文件夹
import java.io.File;
public class exec4 {
public static void main(String[] args) {
//请不要改变file对象pathname,危险,慎用该方法!!!
try {
File file = new File("D:\\ddd\\src");
deleteFile(file);
}catch (NullPointerException e ){
System.out.println("请仔细检查该文件是否存在");
e.printStackTrace();
}
}
//创建删除方法
public static void deleteFile(File file){
//接收file对象,遍历,并用file数组接收
File[] files = file.listFiles();
//遍历数组中的file对象
for (File f : files) {
//如果是文件,删除
if (f.isFile()){
f.delete();
}else{
//如果是文件夹,使用递归
//将 f 传入,因为f代表的是数组中的每一个对象。
deleteFile(f);
}
}
//循环结束后把自己也删除了
//文件中虽然有一个空文件夹,但是还是进入else环节,然后遍历file放入数组中,
// 但是发现为空,这时返回一个空数组,即不进行下面的遍历,直接删除自己。一层一层返回到最初。
file.delete();
}
}
!!!在写pathname时一定要注意,不要只写盘符, 否则就等着重装系统把,不建议使用该方法,还是自己手动删除方便点,本方法仅供参考,再次强调不建议使用。
第二个小练习是统计文件格式后缀及其数量
import java.io.File;
import java.util.HashMap;
import java.util.Map;
public class exec6 {
public static void main(String[] args) {
//统计文件夹中有多少文件类型及其数量
HashMap<String, Integer> count = getCount(new File("D:\\ddd"));
System.out.println(count);
}
public static HashMap<String,Integer> getCount(File file){
//创建HashMap存放数据
HashMap<String,Integer> hm = new HashMap<>();
//遍历,结果放入file数组
File[] files = file.listFiles();
for (File f : files) {
//遍历数组,用file对象干什么,去找文件类型并计数
//先判断是否为文件
if (f.isFile()){
//找到并切割文件名后缀,根据 . 来切割
String[] arr = f.getName().split("\\.");
//因为 会有a.a.txt或者更多类似情况出现,所以做一个判断,数组的长度大于2时再放入集合
if (arr.length >= 2){
//不管你长度多少,length减1永远是最后一个索引,得到后缀名
String endName = arr[arr.length - 1];
//得到后缀后做一个判断,是否已经存在hm集合中
if (hm.containsKey(endName)){
//存在,数量自增
int count = hm.get(endName);
count++;
hm.put(endName,count);
}else {
//如果不存在,直接添加入集合
hm.put(endName,1);
}
}
}else {
//如果是文件夹
//创建一个子集合,接受次次级文件夹的数据
HashMap<String, Integer> sonMap = getCount(f);
//遍历sonMap,得到key 和 value
for (Map.Entry<String, Integer> entry : sonMap.entrySet()) {
String key = entry.getKey();
Integer value = entry.getValue();
//判断父集合hm中是否有该key
if (hm.containsKey(key)){
// 如果有,加上子集合中该key的value值
int count = hm.get(key);
count += value;//value是子集合中的数量
hm.put(key,count);
}else {
//不存在,直接put
hm.put(key,value);
}
}
}
}
return hm;
}
}
这个小练习有点难度,不懂评论区留言哦!!