JAVA中的文件及目录处理类--File

  在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());     
     }
}

程序首次运行结果:

1
是目录吗? true

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());  
     }
}

   首次运行结果:

1
是文件吗? false

同样会发现类似于上面的问题,这是因为他只是代表了一个文件对象,并没有真正的创建,要用到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());  
     }
}

结果

1
是文件吗? true

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); // 打开目录下的所有文件及文件夹
     }
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值