注:知识点见以往博客。本篇是需求实现过程中的注意点及改进。
需求一:找到后缀为avi的所有文件
1)分析:
首先需要进入文件,然后遍历数组,判断是否是文件,若不是则还需要遍历文件夹;
本题可以采用递归思想。
public class Test{
public ststic void main(String[] args){
//1.进入文件
//2.遍历数组
//3.判断
//4.判断
File src=new file("C:\\");
findAVI(file);
}
public static void findAVI(File src){
//进入文件夹src
File[] file=src.listFiles();
//遍历数组,依次得到src中每一个文件或文件夹
for(File file:files){
if(file.isFile()){
//如果是文件,则可以执行业务逻辑
String name=file.getName();
if(name.endWish(".avi")){
System.out.println(file);
}else{
//如果是文件夹,就可以递归
findAVI(file);
}
}
}
}
}
2)说明:
运行会报错 原因为当文件夹为空,或者无法访问。
3)改进:
判断文件夹是否为空
public class Test{
public ststic void main(String[] args){
//1.进入文件
//2.遍历数组
//3.判断
//4.判断
File src=new file("C:\\");
findAVI(file);
}
public static void findAVI(File src){
//进入文件夹src
File[] file=src.listFiles();
//遍历数组,依次得到src中每一个文件或文件夹
if(file!=null){
for(File file:files){
if(file.isFile()){
//如果是文件,则可以执行业务逻辑
String name=file.getName();
if(name.endWish(".avi")){
System.out.println(file);
}else{
//如果是文件夹,就可以递归
findAVI(file);
}
}
}
}
}
}
4)拓展:
获取本地所有盘符
public static void findAVI(){
File[] arr=File.listRoots();
for(File f:arr){
findAVI(f);
}
}
需求二:删除一个多级文件夹
1)分析:
如果我们要删除一个有内容的文件夹:首先先删除文件夹里面的所有内容,然后再删除自己
public class Test{
public ststic void main(String[] args){
File src=new file(D:\\aaa\\src");
delete(file);
}
public static void delete(File src){
//进入文件夹src
File[] file=src.listFiles();
//遍历数组,依次得到src中每一个文件或文件夹
for(File file:files){
if(file.isFile()){
//如果是文件,则可以执行业务逻辑
file.delete();
}else{
//如果是文件夹,就可以递归
delete(file);
}
}
//再删除自己
src.delete();
}
2)说明:
最后遍历到空文件夹时,底层是一个空数组,所以不会报错。
需求三:求文件夹里面所有文件的大小
public static void getLenI(File src){
//进入文件夹src
long len=0;
File[] file=src.listFiles();
//遍历数组,依次得到src中每一个文件或文件夹
for(File file:files){
if(file.isFile()){
//如果是文件,则可以执行业务逻辑
len=len+file.length();
}else{
//如果是文件夹,就可以递归
len=len+getlen(file);
}
}
return len;
}
1)说明:
再次调用方法len会被覆盖,需要在else中加上之前文件的len。
方法调用要注意变量的改变,防止丢失数据。
版权声明:
此文由Hygge-star原创,转载需注明出处。