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
*/