- 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");
}
}
}
}
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";
}
}
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;
}
}
}
}