Java面向对象第十三天( --file-使用 --查找---删除--文件过滤器( FileFilter和FilenameFilter )---- )

只有return了,结果才能被接收被下一个环节使用

1. 获取文件夹里面文件的字节数

public static void fun1(){
 File file = new File("/Users/lanou/Desktop/zhang/hai.txt")
//mac里面一个英文字节是一个字节,一个中文字节是三个字节;
 int num = file.length();
 System.out println( num)
}

2.从控制台输入一个字符串, 该字符串是文件夹路径 计算这个文件夹的大小,

public static file fun(){
 //首先要判断输入的是不是文件夹,如果是就返回这个文件夹;
  System.out.printlu("请输入文件夹");
 Scanner scanner = new Scanner(System.in);
 while(true){
  String path = Scanner.nextLine();
   //用路径构建一个file对象
 File file = new File(path);
   if(!file.exists){
       sout("你输入的不存在请重新输入")
   }else if(file.isFile){
         sout("你输入的是文件不是文件夹请重新输入")else{
         sout("你输入的是文件夹")
        return file;
        }
     }
} }}

2.1 计算文件夹大小;

public static  long fun1(File file){
  long sum = 0;
 //获取文件夹中所有文件和文件夹的数组
  File[] files = file.listFiles();
     for(File sub:files){
     if(sub.isDirectory){
       //递归调用
     sum = sum + len(file2);
   }else{
      //说明是文件夹
     sum = sum +file2.length();
     }
  }
  return num ;
}

3.删除文件夹中所有的文件

public static void fun3(File file){
    //遍历这个文件夹;
  File files =   file.listFiles();
  for(File file2 :files){
       if(file2.isDirectory){
            fun3(file2);
      }else{
           file2.delete();
       }
   }
// 循环结束以后再把文件夹给删掉了;就行
  file.delete()
}

4.按照层级打印文件夹;

public static void fun4(File file,int level){
  //循环出要打印的空格
 String string = "";
 for (i=0;i<level;i++){
   string = "   ";
 } 
 File[] file = file.listFiles();
 for( File file2 : file){
   if(!file2.isHidden()){
      sout(string+file2.getName());
      //将1级名字全部打出来;
      
  }else{
       fun4(file2,level+1);//1级下面的文件夹如果有子文件夹,也一起打印出来;
      
    }
 }

}

5.输入一个文件夹路径,用map记录类型出现的次数,txt5 , java 10 ,png3 ;

public static void fun5(File file , HashMap<String,Integer> map){
    //找出所有的文件
   File[] files = files.listFiles();
   for(File file1 :files){
        if(file1.isDirectory){
         fun5(file1);
      }else{
        //获取到文件名的字符串;
        String name = file1.getName();
        // 将获取到的文件名的字符串 分开,以点为界限进行分开成两部分;
        String[] st = name.split(//.);
       // 获取类型.["wanglong","txt"] 
           String type = st[1];
        if(!map.contaninsKey){
          map.put(type,1)
          }else{
            Integet in = map.get(type);
 integer= integer+1;
  map.put(type,integer);
            }
         
       }
   }
 }

5.1开始测试

public static void main(String[] args) {
      //测试
		HashMap<String, Integer> map = new HashMap<>();
		File file = new File("/Users/lanou/Desktop/zzz");
		record(file, map);
		
	}

2.FileFilter和FileNameFilter

1.获取文件中的TXT文件;

public static void print(File file){
       File files = file.listFiles( new Txt() ); //此处许传入实现类的对象;
       for(File file1:files){
        if(file1.isDirectory){
         print(file1);
      } else{
        String name = file1.getName();
          // 如果是文件就打印文件名
          sout(name)
     }

   }
 }

  1.1  现在需要一个   实现类   来实现FileFilter接口

class Txt implements FileFilter{
      //重写方法,这方法的作用如果返回true,就往控制台打印,从而实现过滤;
   public boolean accpcept(File path){
       if(path.isDireCtory()){
 要将文件夹保存到数组中去;才能继续遍历;不然会被直接过滤掉只能打印一层的数据;文件夹下面的文件夹就不能被遍历到了;
        return true;
    }
//如果后缀是TXT就返回true,不过滤掉;
   return pathname.getName().endWith("txt")
  }
    
 }

2.FileFilter相当于是对FileNameFilter接口的一个升级;直接使用FileFilter不用拼接了;

class MyFilenamefilter implements FilenameFilter {

//测试FileNameFilter使用时候,必须拼接一下

 //过滤200k以上的文件;

@Override public boolean accept(File dir, String name) { // dir相当于是文件夹的父路径的文件, // name相当于是子路径,文件名字,并且是个字符串; // file文件重载构造方法; //第一步必须拼接成完整的文件路径; 其他使用方法和FileFilter完全一样; File pathname = new File(dir, name); System.out.println(dir); System.out.println(name); //判断文件大小, //保留文件夹 if (pathname.isDirectory()) { //是文件夹,就要把文件夹存到数组里面; return true; } if (pathname.length()<200*1024) { return true; } return false; }







猜你喜欢

转载自blog.csdn.net/a18755425397/article/details/80487277