JAVA 基础 day22-练习

  • 1.使用文件名称过滤器筛选将指定文件夹下的小于200K的小文件获取并打印
package exrcise;

import java.io.File;
import java.io.FileFilter;

public class MyFileFilter implements FileFilter{

	@Override
	public boolean accept(File pathname) {
		if(pathname.isDirectory()) {
			return true;
		}
		if(pathname.length() / 1000 < 200) {
			return true;
		}
		return false;
		
	}



 
package exrcise;

import java.io.File;
import java.io.FileFilter;

public class Test1 {
	/*
	 * 1.使用文件名称过滤器筛选将指定文件夹下的小于200K的小文件获取并打印
	 * */
	
	public static void main(String[] args) {
		
		File file = new File("/home/alex/download/");
		function(file);
	}
	
	
	public static void function(File file) {
		
		
		File[] fl = file.listFiles(new MyFileFilter());
		
		for (File f : fl) {
			if(f.isDirectory()) {
				function(f);
			}else {
				System.out.println(f+"__"+f.length()/1000+"KB");
				
			}
		}
	}
}
  • 2.从键盘接收一个文件夹路径,统计该文件夹大小。

package exrcise;

import java.io.File;
import java.math.BigDecimal;
import java.util.Scanner;

public class Test2 {

	public static void main(String[] args) throws Exception {

		Scanner scanner = new Scanner(System.in);
		File path = new File(scanner.nextLine());
		long d = getSize(path);
		System.out.println(d);
		System.out.println(getFormatSize((double)d));
	}
	
	
	
	
	public static long getSize(File path) throws Exception {
		long size = 0;
		if(path.exists()) {
			File[] fl = path.listFiles();
			for (File f : fl) {
				if(f.isDirectory()) {
					size = size + getSize(f);
				}else {
					size = size + f.length();
				}
			}
		}else {
			throw new Exception("目录不存在");
		}
		return size;
	}
	
	
//	找了一个格式化单位的方法有空学习下
	public static String getFormatSize(double size) {  
        double kiloByte = size/1024;  
        if(kiloByte < 1) {  
            return size + "Byte(s)";  
        }  
          
        double megaByte = kiloByte/1024;  
        if(megaByte < 1) {  
            BigDecimal result1 = new BigDecimal(Double.toString(kiloByte));  
            return result1.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() + "KB";  
        }  
          
        double gigaByte = megaByte/1024;  
        if(gigaByte < 1) {  
            BigDecimal result2  = new BigDecimal(Double.toString(megaByte));  
            return result2.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() + "MB";  
        }  
          
        double teraBytes = gigaByte/1024;  
        if(teraBytes < 1) {  
            BigDecimal result3 = new BigDecimal(Double.toString(gigaByte));  
            return result3.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() + "GB";  
        }  
        BigDecimal result4 = new BigDecimal(teraBytes);  
        return result4.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() + "TB";  
    }  
	
	
	
}


  • 3.从键盘接收一个文件夹路径,删除该文件夹。

package exrcise1;

import java.io.File;
import java.util.Scanner;

public class Test1 {
	/*
	 * 3.从键盘接收一个文件夹路径,删除该文件夹。
	 * */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner scan = new Scanner(System.in);
		File path = new File(scan.next());
		
		boolean b = delTree(path);
		System.out.println(b);
	}

	private static boolean delTree(File path) {
		
		if(!path.exists() || !path.isDirectory()) {
			return false;
		}
		File[] fl = path.listFiles();
		if(fl.length == 0) {
			path.delete();
			return true;
		}else {
			for (File f : fl) {
				if(path.isDirectory()) {
					delTree(f);
				}else {
					f.delete();
				}
				f.delete();
			}
			path.delete();
			return true;
		}
	
	}

}



  • 4.从键盘接收一个文件夹路径,把文件夹中的所有文件以及文件夹的名字按层级打印
        例如:
        aaa是文件夹,里面有bbb.txt,ccc.txt,ddd.txt这些文件,有eee这样的文件夹,eee中有fff.txt和ggg.txt,打印出层级来
        aaa
            bbb.txt
            ccc.txt
            ddd.txt    
            eee
                fff.txt
                ggg.txt

package exrcise1;

import java.io.File;
import java.util.Scanner;

public class Test2 {

	public static void main(String[] args) {
		File path = getDir();
		printDir(path, 0);
	}

	private static File getDir() {
		while(true) {
			Scanner scanner = new Scanner(System.in);
			System.out.println("请输入目录\n");
			String userInput = scanner.nextLine();
			if(userInput.equals("exit")) {
				System.out.println("退出程序...");
				System.exit(0);
			}
			File path = new File(userInput);
			if (!path.exists() || !path.isDirectory()) {
				System.out.println("输入的目录不存在或不是目录!\n");
			}else {
				return path;
			}
		}
	}

	private static void printDir(File path, int count) {
		for (File f : path.listFiles()) {
			for(int i=0; i<=count; i++) {//忘记加=第一次循环不会输出
				System.out.print("\t");
			}
			System.out.println(f.getName());//无论是否文件夹都要输出文件名
			if(f.isDirectory()) {
				printDir(f, count++);
			}
		}
	}

}


  • 5.键盘录入一个文件夹路径,统计该文件夹(包含子文件夹)中每种类型的文件及个数,注意:用文件类型(后缀名,不包含.(点),如:"java","txt")作为key,
                用个数作为value,放入到map集合中,并用两种方式遍历map集合
                例如:
                doc 的类型的文件有  3 个
                java 的类型的文件有  5 个
                txt 的类型的文件有  7 个
package exrcise2;

import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Scanner;

public class Test5 {
	/*
	 * 5.键盘录入一个文件夹路径,统计该文件夹(包含子文件夹)中每种类型的文件及个数,注意:用文件类型(后缀名,不包含.(点),如:"java","txt")作为key,
			用个数作为value,放入到map集合中,并用两种方式遍历map集合
			例如:
			doc 的类型的文件有  3 个
			java 的类型的文件有  5 个
			txt 的类型的文件有  7 个
	 * 
	 * */
	
	//记录文件类型与数量的容器 关于final关键字 https://blog.csdn.net/alexzt/article/details/79928909
	public static final HashMap<String, Integer> map = new HashMap<>();
	
	public static void main(String[] args) {
		File path = getDir();
		getDirMap(path);
		
		for ( String key : map.keySet()) {
			System.out.println(key + " " +map.get(key));
		}
	}
	
	private static void getDirMap(File path) {
		for (File f : path.listFiles()) {
			if(f.isDirectory()) {
				getDirMap(f);
			}else if(f.isFile()){
				String ends = f.getName().split("\\.")[1];
				if(map.containsKey(ends)) {
					map.put(ends, map.get(ends)+1);
				}else {
					map.put(ends, 1);
				}
			}
		}
	}


	private static File getDir() {
		while(true) {
			Scanner scanner = new Scanner(System.in);
			System.out.println("请输入目录\n");
			String userInput = scanner.nextLine();
			if(userInput.equals("exit")) {
				System.out.println("退出程序...");
				System.exit(0);
			}
			File path = new File(userInput);
			if (!path.exists() || !path.isDirectory()) {
				System.out.println("输入的目录不存在或不是目录!\n");
			}else {
				return path;
			}
		}
	}
	
}

猜你喜欢

转载自blog.csdn.net/alexzt/article/details/79895187