在Java中提供了操做文件及目录(即咱们所说的文件夹)类File。有如下几点注意事项: java
(1)不管是文件仍是目录都使用File类操做; 编程
(2)File类只提供操做文件及目录的方法,并不能访问文件的内容,因此他描述的是文件自己的属性; 数组
(3)若是要访问文件自己,用到了咱们之后要学习的IO流. ide
下面让咱们开始File的学习吧。
学习
一:构造方法
测试
File 文件名/目录名 = new File("文字路径字符串");
spa
在Java中提供了几种建立文件及目录的构造方法,但大致上都是用参数中的文字路径字符串来建立,路径能够是相对路径或绝对路径,区别在于:
orm
(1)绝对路径名包含了他所在文件的所有信息 对象
(2)相对路径必须依据其余路径名的信息进行解释
blog
二:通常方法
(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
|
//筛选出文件名为.java后缀的文件
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) {//重写accept方法
if(ff.getName().endsWith(".java")){//name以.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);// 打开目录下的全部文件及文件夹
}
}
|
|
原文地址:
http://cinderella7.blog.51cto.com/7607653/1259097