Java日志十「File」

**

File

**
这篇日志写了Java中File类的创建,常用方法以及FileFilter的使用。

想要通过代码创建文件以及对文件操作,首先要知道文件的路径是什么,以我的电脑为例,看一下我桌面一个html文件的路径:/Users/dudududu/Desktop/ttt.html。

这个路径除了包含了我们熟悉目录名称外,还包含了文件名称分隔符(/),而不同的OS有不同的文件名称分隔符,幸好我们可以用一个File类的静态方法查看此OS下的文件分隔符

	//separator静态方法
	String separator=File.separator;
	System.out.println(separator);

结果

/

介绍完这个,我们来看一下File类的三种构造方法

第一种,传递一个参数

	File f1=new File(/Users/dudududu/Desktop/ttt.html);
	System.out.println(f1);

第二种,传递两个参数

	File f2=new File("/Users/dudududu/","⁨Desktop/ttt.html");
	System.out.println(f2);

第三种,传递两个参数,第一个参数是File类的对象

	File parent=new File("/Users/dudududu/");
	File f3=new File(parent,"⁨Desktop/ttt.html");
	System.out.println(f3);

结果

/Users/dudududu/Desktop/ttt.html
/Users/dudududu/⁨Desktop/ttt.html
/Users/dudududu/⁨Desktop/ttt.html

我们以上面创建的f1为例,介绍一下File类的常用方法

	//getName方法
	String name=f1.getName();
	System.out.println(name);//输出文件名,不管路径写的是绝对的还是相对的

	//length方法
	long l=f1.length();
	System.out.println(l);//输出文件字节

	//exists方法
	System.out.println(f1.exists());//返回一个boolean值,表达文件是否存在

	//isDirectory方法
	System.out.println(f1.isDirectory());//返回一个boolean值,表示这个路径是否为一个目录(文件夹)

	//isFile方法
	System.out.println(f1.isFile());//返回一个boolean值,表示这个路径是否为一个文件

	//createNewFile,创建新一个文件
	File f4=new File(File.separator+"Users"+File.separator+"dudududu"+File.separator+"Desktop"+File.separator+"ddd.html");
	try {
		boolean b1=f4.createNewFile();
		System.out.println(b1);
		} catch (IOException e) {
		System.out.println("创建文件出错");
		e.printStackTrace();
	}
		
	//mkdir只可以创建单级文件夹
	File f5=new File(File.separator+"Users"+File.separator+"dudududu"+File.separator+"Desktop"+File.separator+"myFileFolder");
	boolean b2=f5.mkdir();
	System.out.println(b2);
		
	//mkdirs可以创建多级文件夹
	File f6=new File(File.separator+"Users"+File.separator+"dudududu"+File.separator+"Desktop"+File.separator+"myFileFolder2"+File.separator+"myFileFolder3");
	boolean b3=f6.mkdirs();
	System.out.println(b3);

结果

ttt.html
511
true
false
true
true
true
true

我们看一下桌面的文件创建情况:(由于还有其他文件我只展示了一部分桌面)

在这里插入图片描述

剩下的一些常用方法

	//delete方法法可以删除路径上的文件或者文件夹,当文件夹中有内容时,不会删除返回false
	 boolean b4=f4.delete();
	 System.out.println(b4);
		 
	 boolean b5=f5.delete();
	 System.out.println(b5);
		

	//list方法,返回一个String数组,包含路径下文件夹里所有文件夹和文件的名称
	File f7=new File(File.separator+"Users"+File.separator+"dudududu"+File.separator+"Desktop"+File.separator+"工具");
	String[] array=f7.list();//list只能遍历目录,不可以遍历一个文件
	for(String filename:array) 
	{
		System.out.println(filename);
	}

结果

true
false
计算机网络:自顶向下方法.原书第6版.pdf
MATLAB_R2018a.app
instruction-book-0304.pdf
VirtualBox
计算机网络
reserch report
BaiduNetdisk_mac.app
西南大学疫情管控系统
Java第十版.pdf
操作系统作业
Windows
多媒体.pdf

我们来看一下啊我桌面上面的工具文件夹里面的文件,验证list方法:
在这里插入图片描述

FileFilter

以上就是File类对象的创建与一些常用方法,下面介绍一个好用的类,FileFilter。

FileFilter是一个接口,并且没有实现类,我们必须自己定义,重写 FileFilter中的accept方法。

方法作用:过滤文件。

方法参数:使用listFiles方法遍历目录,得到的每一个对象

方法的过滤规则:返回false代表不是目标文件,并且返回false后,该文件不会保存在文件数组中,这样起到了过滤的作用

我们来看一下怎么实现一个文件的过滤(用了迭代的思想)

main函数

public static void main(String[] args) {
	File file =new File("/Users/dudududu/Desktop/工具");
	getAllFile(file);
}

	public static void getAllFile(File dir) 
	{
	//listFile方法会把遍历得到的每一个File对象传递参数给accept方法
		 
	File[] files=dir.listFiles(new FileFilterImpl());
	//listFiles方法,返回一个File类型的数组,会把路径一起打印出来
	//listFiles传递了一个FileFilter的实现类参数
		
	for(File f:files) {
	if(f.isDirectory()) 
	{
		//方法迭代,避免有的文件在文件夹中检测不到
		getAllFile(f);
	}
	else {
		System.out.println(f);
	}
	}
}

FileFilter的实现类的代码

public class FileFilterImpl implements FileFilter {
	@Override
	public boolean accept(File pathname) {
		
		if(pathname.isDirectory()) 
		{
			return true;//若是文件夹就返回true,在getAllFile中继续遍历
		}
		return pathname.getName().toLowerCase().endsWith(".docx");//遇到工具文件夹中所有的docx文件才返回true
	}
}

结果(为了方便展示,我把工具文件夹清理了一下)

/Users/dudududu/Desktop/工具/操作系统作业/Assignment/222018321062069高飞翔Assignment-2.docx

/Users/dudududu/Desktop/工具/操作系统作业/Assignment/222018321062069高飞翔assingnment6.docx

/Users/dudududu/Desktop/工具/操作系统作业/Assignment/222018321062069高飞翔assignment5.docx

/Users/dudududu/Desktop/工具/操作系统作业/Assignment/222018321062069高飞翔Assignment-3.docx

/Users/dudududu/Desktop/工具/操作系统作业/Assignment/222018321062069高飞翔Assignment-4.docx

/Users/dudududu/Desktop/工具/操作系统作业/Assignment/222018321062069高飞翔Assignment-1.docx

我们再来看一下工具文件夹检测结果
在这里插入图片描述
在这里插入图片描述
这次更新就到这里了。下次更新IO流的知识

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值