File类的学习

File类是用来将文件或文件夹封装成对象的类,使得使用者能过更加方便地对文件和文件夹进行操作


之前学习了IO流,IO流也是对文件的操作,那么为什么还要新创一个File类呢?因为IO流实际操作的是文件中数据,而不是对文件本身进行操作,而且IO流根本无法进行关于文件夹的操作,所以,引入一个File类还是很有必要的


对于File类的用法,实际上就是通过路径来对文件或文件夹进行封装,因此,在File类的使用中,路劲是最为关键的属性


构造函数:


File(String pathname)//通过路径初始化File对象,pathname可以是存在的路径,也可以是不存在的路径

File(String parent,String child)//如此构造出来的对象路径为parent+child

File(File parent,String child)


重要的方法和属性:


1,分隔符:静态属性 separator 在Windows中等价于\,利于跨平台


2,建立(虽然一开始通过提供的路径已经封装成了对象,但并不代表建立了文件(文件夹),只是有了对象,要通过对象的方法来建立文件(文件夹)):

——1,bool createNewFile()//根据File对象封装的路径来建立一个文件,如果文件已存在,则不建立,返回false

——2,bool mkdir()//根据File对象封装的路径来建立一个文件夹,但是只能建立一层,不能建立多层次的文件夹,如果文件夹已存在或路径包含多层文件夹,则不建立,返回false

——3,bool mkdirs()//可以建立多层次的文件夹


3,删除:

——1,bool delete()//删除已存在的指定文件(文件夹)

——2,bool deleteOnExit()//在程序推出时删除指定文件(文件夹)


4,判断:

——1,bool exists()//判断文件是否存在

——2,bool isFile()//判断是否是文件

——3,bool isDirectory()//判断是否是文件夹

——4,bool isHidden()//判断是否是隐藏文件

——5,bool isAbsolute()//判断路径是否是绝对路径

*注意:2,3,4:若还没建立文件(文件夹),那一定是false


5,获取信息:

——1,getName()

——2,getPath()//获取路径

——3,getParent()

——4,getAbsolutePath()//获取绝对路径

——5,lastModified()//最后修改的时间

——6,length()//路径名表示的文件的长度


6,其他:

——1,File[]  listRoots()//获得有效盘符对象

——2,String[]  list()//获得当前路径下所有文件名称,当前目录必须是文件夹

——3,File[]  listFiles()//获得当前路径下所有文件对象



演示代码1:

原本文件:



代码:

import java.io.*;
class FileDemo1
{
	public static void main(String[] args) throws IOException//createNewFile会抛出IOException
	{
		File f1=new File("a.txt");
		File f2=new File("f:\\Java\\practice\\File");
		File f3=new File("f:"+File.separator+"Java"+File.separator+"practice\\File\\a");
		File f4=new File("haha.txt");
		File f5=new File("hehe.txt");
		File f6=new File("hh\\mm\\nn");

		System.out.println("f3 : "+f3.getPath());

		System.out.println("f1 : "+f1.getPath());//获取相对路径
		System.out.println("f1 : "+f1.getAbsolutePath());//获取绝对路径

		System.out.println("f1 : "+f1.exists());
		f1.delete();//删除a.txt
		System.out.println("f1 : "+f1.exists());

		System.out.println("f4_file: "+f4.isFile());
		System.out.println("f4_dir: "+f4.isDirectory());

		f4.createNewFile();//建立文件

		System.out.println("f4_file: "+f4.isFile());
		System.out.println("f4_dir: "+f4.isDirectory());


		f5.mkdir();//虽然路径有后缀,但是生成文件夹
		f6.mkdirs();//生成多层文件夹
	}
}
/*
结果:
f3 : f:\Java\practice\File\a  证明separator等同于'\'
f1 : a.txt   
f1 : F:\Java\practice\File\a.txt
f1 : true
f1 : false
f4_file: false
f4_dir: false
f4_file: true
f4_dir: false
*/

修改后文件:


其中hh文件夹中还有多层文件夹


演示代码2:

File目录:



代码:

import java.io.*;
class FileDemo2 
{
	public static void sop(Object obj)
	{
		System.out.println(obj);
	}
	public static void main(String[] args) 
	{
		File[] farr=File.listRoots();
		File f=new File("f:\\Java\\practice\\File");
		String[] fs=f.list();
		File[] fa=f.listFiles();
		for(File arr : farr)
		{
			sop(arr.getPath());
		}
		sop("=====================================");
		for(String str:fs)
		{
			sop(str);
		}
		sop("=====================================");
		for(File arr:fa)
		{
			sop(arr.getAbsolutePath());
		}
	}
}
/*
结果:
C:\
D:\
E:\
F:\
G:\
H:\
=====================================
a
b
b.txt
c.txt
d.txt
FileDemo1.class
FileDemo1.java
FileDemo1.java.bak
FileDemo2.class
FileDemo2.java
FileDemo2.java.bak
haha.txt
hehe.txt
hh
=====================================
f:\Java\practice\File\a
f:\Java\practice\File\b
f:\Java\practice\File\b.txt
f:\Java\practice\File\c.txt
f:\Java\practice\File\d.txt
f:\Java\practice\File\FileDemo1.class
f:\Java\practice\File\FileDemo1.java
f:\Java\practice\File\FileDemo1.java.bak
f:\Java\practice\File\FileDemo2.class
f:\Java\practice\File\FileDemo2.java
f:\Java\practice\File\FileDemo2.java.bak
f:\Java\practice\File\haha.txt
f:\Java\practice\File\hehe.txt
f:\Java\practice\File\hh
*/


==============================================================================================================================

文件的筛选:


在上面的学习中,可以把一个文件夹中的所有文件都输出,但是,如果只想输出其中一种文件该怎么做呢,比如我只想要java文件


这时,就要用到筛选器:


1,String[]  list(FilenameFilter  filter)

2,File[]  listFiles(FilenameFilter  filter)


不难看出,所谓的筛选器,就是FilenameFilter对象,而FilenameFilter是一个接口,因此,我们需要先建立一个类去实现该接口,然后在建立对象传入到函数中,这种形式类似于集合中的比较器的使用


代码演示:

文件夹:



代码:

import java.io.*;
class MyFilter implements FilenameFilter
{
	public boolean accept(File dir,String name)
	{
		return name.endsWith(".java");//根据后缀是否为java来筛选
	}
}
class FilenameFilterDemo 
{
	public static void main(String[] args) 
	{
		File dir=new File("F:\\Java\\practice\\File");
		File[] farr=dir.listFiles(new MyFilter());//传入筛选器
		for(File s:farr)
		{
			System.out.println(s.getAbsolutePath());
		}
	}
}
/*
结果:
F:\Java\practice\File\FileDemo1.java
F:\Java\practice\File\FileDemo2.java
F:\Java\practice\File\FilenameFilterDemo.java
*/

















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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值