练习1:File类相关的API的练习题
需求:在当前模块下的aaa文件夹中创建一个a.txt文件
package a13filedemo;
import java.io.File;
import java.io.IOException;
public class FileTest1 {
public static void main(String[] args) throws IOException {
//1.创建a.txt的父级路径
File file=new File("Test\\aaa");
//2.创建父级路径
//如果aaa存在,此时创建失败,方法返回false
//如果aaa不存在,此时创建成功
file.mkdirs();
//3.拼接父级路径和子级路径
File src=new File(file,"a.txt");
boolean b = src.createNewFile();
if(b){
System.out.println("创建成功");
}else{
System.out.println("创建失败");
}
}
}
运行结果:
练习2:File类相关的API的练习题
需求:定义一个方法找某一个文件夹中是否有以avi结尾的电影(暂时不考虑子文件夹)
package a13filedemo;
import java.io.File;
public class FileTest2 {
public static void main(String[] args) {
File file=new File("E:\\JAVA\\24_3_28\\basic_code\\ddd");
boolean b = havaAVI(file);
System.out.println(b);//false
}
public static boolean havaAVI(File file){
//进入ddd文件夹,而且要获取里面所有的内容
File[] files = file.listFiles();
//2.遍历数组获取里面的每一个元素
for (File f : files) {
if(f.isFile()&&f.getName().endsWith(".avi")){
return true;
}
}
return false;
}
}
运行结果:
练习3:
需求:定义一个方法找某一个文件夹中是否有以avi结尾的电影(需要考虑子文件夹)
套路:1.进入文件夹2.遍历数组3.判断
package a13filedemo;
import java.io.File;
public class FileTest3 {
public static void main(String[] args) {
File src=new File(("C:\\"));
findAVI();
}
public static void findAVI(){
//获取本地所有盘符
File[] arr = File.listRoots();
for (File f : arr) {
findAVI(f);
}
}
public static void findAVI(File src){
//1.进入文件夹src
File[] files = src.listFiles();
//2.遍历数组,依次得到src里面的每一个文件或者文件夹
if(files!=null){
for (File file : files) {
if(file.isFile()){
String name = file.getName();
if (name.endsWith(".avi")){
System.out.println(file);
}
}else{
//细节:再次调用本方法的时候,参数一定是src的次一级路径
findAVI(file);
}
}
}
}
}
练习4:删除一个多级文件夹
如果我们要删除一个有内容的文件夹,先删除文件夹里面所有内容,再删除自己
package a13filedemo;
import java.io.File;
public class FileTest4 {
public static void main(String[] args) {
File file=new File("E:\\JAVA\\24_3_28\\basic_code\\ddd");
delete(file);
}
public static void delete(File src){
//1.删除文件夹里面的所有内容,再删除自己
File[] files = src.listFiles();
for (File file : files) {
if(file.isFile()){
file.delete();
}else {
delete(file);
}
}
//2.删除自己
src.delete();
}
}
练习5:统计一个文件夹的总大小
package a13filedemo;
import java.io.File;
public class FileTest5 {
public static void main(String[] args) {
File file=new File("E:\\JAVA\\24_3_28\\basic_code\\bbb");
long len = getLen(file);
System.out.println(len);
}
public static long getLen(File src){
long len=0;
File[] files = src.listFiles();
for (File file : files) {
if(file.isFile()){
len=len+file.length();
}else{
len=len+getLen(file);
}
}
return len;
}
}
运行结果:
练习6:统计一个文件夹中每种文件的个数并打印(需要考虑子文件夹)
package a13filedemo;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class FileTest6 {
public static void main(String[] args) {
File file = new File("E:\\JAVA\\24_3_28\\basic_code\\bbb");
HashMap<String, Integer> hm = getCount(file);
System.out.println(hm);
}
public static HashMap<String, Integer> getCount(File src) {
//定义集合用来统计
HashMap<String, Integer> hm = new HashMap<>();//键表示后缀名,值表示次数
File[] files = src.listFiles();
for (File file : files) {
if (file.isFile()) {
String name = file.getName();
String[] arr = name.split("\\.");
if (arr.length >= 2) {
String endName = arr[arr.length - 1];
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(file);
//遍历sonMap集合把里面的集合累加到hm中
Set<Map.Entry<String, Integer>> entries = sonMap.entrySet();
for (Map.Entry<String, Integer> entry : entries) {
String key = entry.getKey();
Integer value = entry.getValue();
if (hm.containsKey(key)) {
int count = hm.get(key);
count = count + value;
hm.put(key,count);
} else {
hm.put(key, value);
}
}
}
}
return hm;
}
}
运行结果: