Java中找文件夹中最小或者最大的文件

Java找文件夹中最小或者最大的文件


题目:

一般说来操作系统都会安装在C盘,所以会有一个 C:\WINDOWS目录。
遍历这个目录下所有的文件(不用遍历子目录或者遍历子目录)
找出这些文件里,最大的和最小(非0)的那个文件,打印出他们的文件名
注: 最小的文件不能是0长度


1. 不包括子文件夹中的文件

思路:创建文件数组,直接比较

package j2se;

import java.io.File;

public class IOTest {

	public static void main(String[] args) {
		
		/*	遍历文件夹(不包括文件夹内文件)
		 * 
		 * 	一般说来操作系统都会安装在C盘,所以会有一个 C:\WINDOWS目录。

			遍历这个目录下所有的文件(不用遍历子目录)
			
			找出这些文件里,最大的和最小(非0)的那个文件,打印出他们的文件名
			
			注: 最小的文件不能是0长度
		 */
		
		File file = new File("C:/Windows");
		System.out.println("文件是否存在" + file.exists());
		if (file.exists()) {
			System.out.println("文件存在我们进行下一步操作!");
		}else {
			System.out.println("文件不存在!");
			return;
		}
		
		
		File[] files = file.listFiles();//创建数组文件
		
		String fMaxName = "";
		String fMinName = "";
		long fMaxLength = 0;
		long fMinLength = Long.MAX_VALUE;
		
		
		for (File f : files) {
			if (f.isFile()) {
				System.out.println(f);
				
				if (f.length() > fMaxLength) {
					fMaxLength = f.length();
					fMaxName = f.getAbsolutePath();
				}
				
				if (f.length() != 0 && f.length() < fMinLength) {
					fMinLength = f.length();
					fMinName = f.getAbsolutePath();
				}
			} 
			
		}
		
		System.out.println("最大的文件是:" + fMaxName + "长度为" + fMaxLength + "字节");
		System.out.println("最小的文件是:" + fMinName + "长度为" + fMinLength + "字节");
		
		
		
	}


2. 包括子文件夹中的文件

思路:递归调用找文件夹中最最小的或者最大的文件
我们以c:/Windows为例

package j2se;

import java.io.File;

public class IOTest {

	//递归找子文件中最小或者最大的
	static File maxFile;
	static File minFile;
	static long maxLength = 0;
	static long minLength = Long.MAX_VALUE;

	public static void main(String[] args) {
		
		String path = "c:/Windows";
		
		File f = new File(path);//创建一个文件路径
		
		long startTime = System.currentTimeMillis();
		getMaxMinFile(f);//获取最大或者最小文件
		long endTime = System.currentTimeMillis();
		
		if (maxFile != null) {
			System.out.println(path + "目录下的最大文件是:" + maxFile);
			System.out.println("文件长度是:" + maxLength + "字节");
		} 
		
		if (minFile != null) {
			System.out.println(path + "目录下的最小文件是:" + minFile);
			System.out.println("文件长度是:" + minLength + "字节");
		}
		
		System.out.println("一共耗时" + (endTime - startTime) + "ms");
	}
	
	

	public static void getMaxMinFile(File f) {
		
		if(f.isFile()) {//判断是文件
			
			if (f != null) {
					
				if (f.length() >= maxLength) {
					maxFile = f;
					maxLength = f.length();
				}
				
				if (f.length() != 0 && f.length() < minLength) {
					minFile = f;
					minLength = f.length();
				}
			}
		} else if(f.isDirectory()) {//判断是文件夹
			File[] fs = f.listFiles();//以文件数组的形式,返回当前文件夹下所有文件,不包括子文件
			if (fs != null) {
				for (File file : fs) {
					getMaxMinFile(file);
				}
			}
		}
 	}

}

运行结果:

c:/Windows目录下的最大文件是:c:\Windows\SoftwareDistribution\Download\b4241790717d3721cce19cff0db43ebd321d8f98
文件长度是:473274097字节 c:/Windows目录下的最小文件是:c:\Windows\Boot\PCAT\bootnxt
文件长度是:1字节 一共耗时196639ms


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值