1.在不存在的文件夹下创建文件
//在当前模块下aaa文件下ddd下eee中创建一个e.txt文件
public class Demo2 {
public static void main(String[] args) throws IOException {
File file = new File("day11_myFile\\aaa\\ddd\\eee");
//createNewFile()建立文件需要文件夹存在
//如果文件不存在,则先创建出来
if(!file.exists()){
file.mkdirs();
}
//存在后,则在文件目录下创建文件
File file1 = new File(file, "e.txt");
System.out.println(file1.createNewFile());
}
}
打印结果:
------------------------------------------------------------------
true
2.删除一个文件夹里面的所有内容
//删除一个文件夹里面的所有内容
public class Demo3 {
public static void main(String[] args) {
//指定删除文件A的路径
//File A = new File("C:\\A");
//deleteDir(A);
}
//删除文件夹的方法【删除的内容不会进回收站,直接在硬盘抹除】
private static void deleteDir(File dir) {
//获取文件夹中的内容
File[] files = dir.listFiles();//2.长度为0返回的数组无法遍历
//删除
for (File file : files) {
//是文件,则直接删除
if(file.isFile()){
file.delete();
//如果不是文件,则不能直接删除,需要先删除文件夹里面的文件
}else {
//删除文件夹里面的文件
deleteDir(file);//1.所有文件删完之后则参数为空文件夹传入,返回值为0
}
}
//循环结束,则文件夹里面的内容删除完毕,只需删除空的文件夹即可
dir.delete();//3.跳过中间执行删除空文件夹完成要求
//空文件夹删除层级有几层则执行几次【从最深的层级空文件夹开始,到A本身结束】
}
}
3.统计一个文件夹里面所有文件的后缀名和所对应的次数
//统计一个文件夹里面所有文件的后缀名和所对应的次数
public class Demo4 {
public static void main(String[] args) {
HashMap<String, Integer> map = new HashMap<>();
getCount(new File("day11_myFile\\aaa"), map);
//打印集合查看结果
System.out.println(map);
}
private static void getCount(File dir, HashMap<String, Integer> map) {
//获取目标文件夹中的内容
String dirName;//变量在参与运算之前必须赋初值[此处不需要]
File[] files = dir.listFiles();
//判断数组是否为空[避免文件夹中有文件无权限访问或者其他为空的情况]
if(files==null){
return;
}
for (File file : files) {
//遍历拿到每一个元素,并判断是否为文件
if (file.isFile()) {
//如果为文件,则获取文件的扩展名并添加到集合中
String[] strArr = file.getName().split("\\.");//因为.表示任意元素,所以需要加\\
//切割数组的最后一个元素为文件后缀名,将其定义为键
dirName = strArr[strArr.length - 1];
//判断该文件后缀在集合中是否存在
//如果存在,则将键对应的值加一再覆盖原来的
if (map.containsKey(dirName)) {
//获取键对应的值+1
Integer value = map.get(dirName);
value = value + 1;
//覆盖
map.put(dirName, value);
//否则不存在,则直接添加,初始值为1
} else {
map.put(dirName, 1);
}
//否则元素不为文件,则递归展开该文件夹,直到为文件再统计
} else {
getCount(file, map);
}
}
}
}
打印结果:
----------------------------------------------------------------------
{txt=3, java=2}
4.写一个方法,求文件夹的大小
/*思路:下面的A文件夹的大小
A文件夹
- aa.txt文件
- bb文件夹
b1.txt
b2.txt
A的大小 = aa.txt大小 + bb文件夹大小*/
public class Demo6 {
public static void main(String[] args) {
//先指定操作文件
File file = new File("day11_myIO\\aaa");
long size = getSize(file);
System.out.println(size);
}
private static long getSize(File dir) {
long sum=0;
//进入到文件内
File[] files = dir.listFiles();
//判断数组是否为空
if(files==null){
return sum;
}
//遍历得到每一个元素
for (File file : files) {
//判断是否为文件
if(file.isFile()){
//如果是,则得到文件的大小
sum+=file.length();
//如果不是则递归进入文件夹内部
}else {
sum+=getSize(file);
}
}
return sum;
}
}
打印结果:
-----------------------------------------------------------
126472134