【Java实战】文件应用最细解析

注:知识点见以往博客。本篇是需求实现过程中的注意点及改进。

需求一:找到后缀为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原创,转载需注明出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值