只有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; }