在Java中提供了操作文件及目录(即我们所说的文件夹)类File。有以下几点注意事项:
(1)不论是文件还是目录都使用File类操作;
(2)File类只提供操作文件及目录的方法,并不能访问文件的内容,所以他描述的是文件本身的属性;
(3)如果要访问文件本身,用到了我们以后要学习的IO流.
下面让我们开始File的学习吧。
一:构造方法
File 文件名/目录名 = new File("文字路径字符串");
在Java中提供了几种创建文件及目录的构造方法,但大体上都是用参数中的文字路径字符串来创建,路径可以是相对路径或绝对路径,区别在于:
(1)绝对路径名包含了他所在文件的全部信息
(2)相对路径必须依据其他路径名的信息进行解释
二:一般方法
(1)文件检测相关方法
a:boolean isDirectory():判断File对象是不是目录
b:boolean isFile():判断File对象是不是文件
c:boolean exists():判断File对象对应的文件或目录是不是存在
d:boolean canWrite():判断FIle对象对应的文件或目录是否可写
e:boolean canRead():判断FIle对象对应的文件或目录是否可读
(2)文件操作的相关方法
a:boolean createNewFile():路径名指定的文件不存在时,创建一个新的空文件
b:boolean delete():删除File对象对应的文件或目录
(3)目录操作的相关方法
a:boolean mkdir():单层创建空文件夹
b:boolean mkdirs():多层创建文件夹
c:String[] list():支队File为文件夹时有效,返回这个目录下的所有文件及子目录
d:File[] listFiles():返回File对象表示的路径下的所有文件对象数组
(4)访问文件相关方法
a:String getName():获得文件或目录的名字
b:String getPath() :获得文件或目录的相对路径
c:String getAbsolutePath():获得文件目录的绝对路径
d:String getParent():获得对象对应的目录的父级目录
e:long lastModified():获得文件或目录的最后修改时间
f:long length() :获得文件内容的长度
g:boolean renameTo("新名字"):重命名此对象的名字,成功返回true,否则返回false
三:文件操作
1:目录的创建
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
public class MyFile
{
public static void main(String[]
args) {
File
file1 = new File( "d:\\test" );
System.out.println( "是目录吗?" +file1.isDirectory());
System.out.println( "是文件吗?" +file1.isFile());
System.out.println( "名称:" +file1.getName());
System.out.println( "相对路径:" +file1.getPath());
System.out.println( "绝对路径:" +file1.getAbsolutePath());
System.out.println( "修改时间:" +file1.lastModified());
System.out.println( "文件大小:" +file1.length());
}
}
|
|
程序首次运行结果:
1
2
3
4
5
6
7
|
是目录吗? false
是文件吗? false
名称:test
相对路径:d:\test
绝对路径:d:\test
修改时间: 0
文件大小: 0
|
|
细心的你可以看到,file1对象是目录啊,怎么在判断“是不是目录”时输出了false呢?这是因为只是创建了代表他是目录的对象,还没有真正的创建,这时候要用到mkdir()/mkdirs()方法,如下:
1
2
3
4
5
6
7
8
9
|
public class MyFile
{
public static void main(String[]
args) {
File
file1 = new File( "d:\\test\\test" );
file1.mkdirs();
System.out.println( "是目录吗?" +file1.isDirectory());
}
}
|
|
程序首次运行结果:
2:文件的创建
1
2
3
4
5
6
7
8
9
|
public class MyFile
{
public static void main(String[]
args) {
File
file1 = new File( "d:\\a.txt" );
System.out.println( "是文件吗?" +file1.isFile());
}
}
|
|
首次运行结果:
同样会发现类似于上面的问题,这是因为他只是代表了一个文件对象,并没有真正的创建,要用到createNewFile()方法,如下
1
2
3
4
5
6
7
8
9
10
11
12
13
|
public class MyFile
{
public static void main(String[]
args) {
File
file1 = new File( "d:\\a.txt" );
try {
file1.createNewFile();
} catch (IOException
e) {
e.printStackTrace();
}
System.out.println( "是文件吗?" +file1.isFile());
}
}
|
|
结果:
3:文件夹与文件的创建目录
文件时存放在文件夹下的,所以应该先创建文件夹,后创建文件,如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
public class MyFile
{
public static void main(String[]
args) {
File
f3 = new File( "d:/test" );
File
f4 = new File( "d:/test/a.txt" );
f3.mkdir();
try {
f4.createNewFile();
} catch (IOException
e) {
e.printStackTrace();
}
File
f5= new File( "d:/test/test/test" );
File
f6 = new File( "d:/test/test/test/a.txt" );
f5.mkdirs();
try {
f6.createNewFile();
} catch (IOException
e) {
e.printStackTrace();
}
}
}
|
|
运行结果为,在D磁盘的test文件夹下有一个a.txt,在D磁盘的test/test/test下有一个a.txt文件。
4:编程:判断是不是有这个文件,若有则删除,没有则创建
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
public class TestFileCreatAndDele
{
public static void main(String[]
args) {
File
f1 = new File( "d:/a.txt" );
if (f1.exists()){
f1.delete();
} else {
try {
f1.createNewFile();
} catch (IOException
e) {
e.printStackTrace();
}
}
}
}
|
|
5:文件的筛选
在File中的list()方法中可以接受一个FileNameFilter的参数,FileNameFilter是个过滤器也是一个接口,可以通过匿名内部类的形式实现他的accept()方法,从而达到筛选的目的 ,如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
public class TestFileFilter
{
public static void main(String[]
args) {
File
file = new File( "d:/test" );
File[]
f = file.listFiles( new FileFilter(){
@Override
public boolean accept(File
ff) {
if (ff.getName().endsWith( ".java" )){
return true ;
} else {
return false ;
}
}
});
for (File
g:f){
System.out.println(g.getName());
}
}
}
|
|
测试之前,在d:/test目录下导入一些文件,以便测试哦。。。结果为筛出了所有.java文件
6:文件的逐层读取
File的listFiles()只能列出当前文件夹下的文件及目录,那么其子目录下的文件及目录该如何获取呢?解决的办法有很多,在这运用递归解决。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
public class TestFindFile
{
public static void openAll(File
f) {
File[]
arr = f.listFiles();
for (File
ff : arr) {
if (ff.isDirectory())
{
System.out.println(ff.getName());
openAll(ff);
} else {
System.out.println(ff.getName());
}
}
}
public static void main(String[]
args) {
File
file = new File( "d:/test" );
openAll(file);
}
}
|
|