Java中File的方法(递归查找文件例子)

本文介绍了Java中File类的使用,包括获取文件信息、判断文件属性、创建文件与目录以及遍历文件系统的操作。通过递归示例展示了如何遍历文件夹并打印所有文件路径,以及如何实现特定文件的递归查找。此外,文章还提及了通过直接传递文件及使用过滤器来提升查找效率的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1:获取文件信息的方法。

public class FileMethod {

	public static void main(String[] args) {
		File file = new File("E:\\wxy\\20-21vue\\npm.txt");
		System.out.println(file.getPath());//获取路径,等于file.toString
		System.out.println(file.toString());//等于getPath
		
		System.out.println(file.getName());//返回文件或文件夹的结尾。
		System.out.println(file.length());//返回文件的大小字节
		
		File file2 = new File("npm.txt");
		System.out.println(file2.getAbsolutePath());//获取当前路径下的绝对路径
	}
}
E:\wxy\20-21vue\npm.txt
E:\wxy\20-21vue\npm.txt
npm.txt
152
E:\workspace\project0005\npm.txt

2:判断文件信息的方法

public class FileMethod2 {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		File file = new File("E:\\wxy\\20-21vue\\npm.txt");
		if(file.exists()) {
			System.out.println(file.isDirectory());
			System.out.println(file.isFile());
		}
	}
}

3:创建文件,文件夹方法:

public class FileMethod3 {
	//文件如果不存在,就会创建返回true,如果已经存在了,就不会创建,返回false。createNewFile只能创建文件
	public static void main(String[] args) throws IOException {
		File file = new File("E:\\wxy\\abc.txt");
		boolean b = file.createNewFile();
		System.out.println(b);
		
		//mkdir() 创建单击文件夹,创建成功返回boolean,如果已经存在或者路径不存在返回false。
		File file2 = new File("E:\\wxy\\abc");
		boolean b2 = file2.mkdir();
		System.out.println(b2);
		
		
		//mkdirs() 创建多级文件夹
		File file3 = new File("E:\\wxy\\aaa\\bbb");
		boolean b3 = file3.mkdirs();
		System.out.println(b3);
		
		//可以删除文件,也可以删除文件夹。
		//删除返回的是boolean,删除成功返回true,如果不存在,或者文件夹有内容返回false删除失败
		boolean delete = file.delete();
		System.out.println(delete);
	}
}

4:遍历文件,文件夹

public class FileBianli {

	public static void main(String[] args) {
		//遍历下一级文件夹
		File file = new File("E:\\图片");
		String[] arr = file.list();//遍历文件
		for(String filename:arr) {
			System.out.println(filename);
		}
		//遍历下一级文件夹的绝对路径
		File file2 = new File("E:\\wxy\\个人资料");
		File[] arr2 = file.listFiles();//便利的是文件夹的绝对路径
		for(File fn: arr2) {//增强for循环遍历
			System.out.println(fn);
		}
	}
}
//csdn截图
//亿图
//思维导图
//E:\图片\csdn截图
//E:\图片\亿图
//E:\图片\思维导图

例1:递归遍历文件夹,打印文件夹下的文件路径。

public class FileBianli {
	public static void main(String[] args) {
		//遍历下一级文件夹
		File file = new File("E:\\图片");
		String[] arr = file.list();
		for(String filename:arr) {
			System.out.println(filename);
		}
		//遍历下一级文件夹的绝对路径
		File file2 = new File("E:\\wxy\\个人资料");
		File[] arr2 = file.listFiles();
		for(File fn: arr2) {
			System.out.println(fn);
		}
	}
}
E:\wxy\个人资料\介绍信.png
E:\wxy\个人资料\转正资料\PPT.pptx
E:\wxy\个人资料\转正资料\tukuppt-59ba831f1fd84.pptx
E:\wxy\个人资料\转正资料\摘要.docx

例2:递归查找某文件

public class SearchFile {
	public static String findFile = "ALL.xlsx";
	public static String path = "E:\\wxy\\整理资料";
	public static void main(String[] args) {
		File file = new File(path);
		File[] filist = file.listFiles();
		search(filist);
	}
	public static void search(File[] flist) {
		for(File fn: flist) {
			if(fn.isFile()) {
//				System.out.println(fn.getName());
				if(fn.getName().toString().equals(findFile)) {//file.getName()方法获取文件名称
				//if(fn.toString().endsWith(findFile)) {//file。toString=file。getPath
					System.out.println(fn);
					return;
				}
			}else if(fn.isDirectory()) {
				File[] filistD = fn.listFiles();
				search(filistD);
			}
		}
	}
}
E:\wxy\整理资料\05-26\ALL.xlsx//找到了文件路径

后续更新:
把文件直接传入更简单:

public class SearchFileNice {
	public static String findFile = "ALL.xlsx";
	public static String path = "E:\\wxy\\整理资料";
	public static void main(String[] args) {
		File filep = new File(path);
		search(filep);
	}
	public static void search(File f) {
		File[] filist = f.listFiles();
		for(File fn: filist) {
			if(fn.isFile()) {
//				System.out.println(fn.getName());
				if(fn.getName().toString().equals(findFile)) {//file.getName()方法获取文件名称
				//if(fn.toString().endsWith(findFile)) {//file。toString=file。getPath
					System.out.println(fn);
					return;
				}
			}else if(fn.isDirectory()) {
				search(fn);
			}
		}
	}
}

加个过滤器查找速度更加快。

public class FileFilterImp implements FileFilter{
	@Override
	public boolean accept(File pathname) {
		// TODO Auto-generated method stub
		if(pathname.isDirectory()) {
			return true;
		}
		return pathname.getName().toLowerCase().endsWith(".xlsx");
	}
}

public class SearchFileNice2 {
	public static String findFile = "ALL.xlsx";
	public static String path = "E:\\wxy";
	public static void main(String[] args) {
		File filep = new File(path);
		search(filep);
	}
	public static void search(File f) {
		File[] filist = f.listFiles(new FileFilterImp());//在这里添加了实现类对象,进行过滤
		for(File fn: filist) {
			if(fn.isFile()) {
//				System.out.println(fn.getName());
				if(fn.getName().toString().equals(findFile)) {//file.getName()方法获取文件名称
				//if(fn.toString().endsWith(findFile)) {//file。toString=file。getPath
					System.out.println(fn);
					return;
				}
			}else if(fn.isDirectory()) {
				search(fn);
			}
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值