黑马程序员——07File类,文件过滤器FilenameFilter以及递归

  ------- android培训java培训、期待与您交流! ----------



1.File类

File类是文件和目录路径名的抽象表示形式,用来将文件或者文件夹封装成对象,以方便对文件和文件夹进行操作。

他常用的构造方法有三个:

构造方法摘要
File(File parent,String child)
          根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。
File(String pathname)
          通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。
File(String parent,String child)
根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。

需要注意的是File类是将一个已经存在或未存在的文件或文件夹封装成对象。

      比如File f = new File("C:\\1.txt");

      如果1.txt存在,可以用exists()判断它是否存在;

      如果它不存在,可以使用creatNewFile方法创建对象,而且返回boolean值表示是否成功。

此外,一个File对象既可以表示文件,也可以表示路径,使用isDirectoryh和isFile来判断文件对象表示的是文件还是目录。

如果他表示的是目录可以是使用list方法来获得该目录下的文件名的数组,

假如这个目录不存在,可以使用mkdir方法来创建它。

File类的常用方法:

intcompareTo(File pathname)
          按字母顺序比较两个抽象路径名。
booleancreateNewFile()
          当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件
booleandelete()
删除此抽象路径名表示的文件或目录。
voiddeleteOnExit()
在虚拟机终止时,请求删除此抽象路径名表示的文件或目录。
booleanequals(Object obj)
测试此抽象路径名与给定对象是否相等。
booleanexists()
测试此抽象路径名表示的文件或目录是否存在。
StringgetName()
返回由此抽象路径名表示的文件或目录的名称。
booleanisDirectory()
测试此抽象路径名表示的文件是否是一个目录。
booleanisFile()
测试此抽象路径名表示的文件是否是一个标准文件。
String[]list()
返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。
String[]list(FilenameFilter filter)
返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中满足指定过滤器的文件和目录。
booleanmkdir()
创建此抽象路径名指定的目录。
StringtoString()
返回此抽象路径名的路径名字符串。
File[]listFiles(FilenameFilter filter)
返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。

2.FilenameFilter  文件过滤器

File的list(FilenameFilter filter) 的方法
返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中满足指定过滤器的文件和目录。

它的参数是一个实现了FilenameFilter的对象,这个接口中只有一个方法

booleanaccept(File dir,String name)
          测试指定文件是否应该包含在某一文件列表中。

要使用文件过滤器我们需要写一个实现了FilenameFilter接口的对象,并复写accept方法。

比如我们要打印出C盘根目录下的.txt文件

复写的时候我们只要传递我们所要求的格式的字符串就可以了

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. import java.io.File;  
  2. import java.io.FilenameFilter;  
  3.   
  4.   
  5. public class MyFilter implements FilenameFilter  
  6. {  
  7.     private String  ext;  
  8.     public MyFilter(String ext) {  
  9.         super();  
  10.         this.ext = ext;  
  11.     }  
  12.     @Override  
  13.     public boolean accept(File f, String name)  
  14.     {  
  15.         return name.endsWith(ext);  
  16.     }  
  17. }  
[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. <p>public class FileDemo {</p><p> public static void main(String[] args) {  
  2.   //传入规则  
  3.   MyFilter mf = new MyFilter(".txt");  
  4.     
  5.   File f = new File("C://");  
  6.     
  7.   //调用File的listFiles对象  
  8.   File[] files = f.listFiles(mf);  
  9.     
  10.   for(File file : files)  
  11.   {  
  12.    System.out.println(file);  
  13.   }  
  14.  }</p><p>}</p>  

3.递归

那么如果我们想要打印出C盘中所有的txt文件怎么办呢?

首先,我们先介绍一下递归:

递归说的通俗点就是函数在方法体内调用自身:

举一个计算1-10相加的和的例子

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. public class digui {  
  2.   
  3.     public static void main(String[] args) {  
  4.           
  5.         System.out.println(getSum(10));  
  6.     }  
  7.   
  8.     public static int getSum(int num)  
  9.     {  
  10.         if (num == 1)  
  11.             return 1;  
  12.         return num + getSum(num - 1);  
  13.     }  
  14. }  

使用递归的注意事项:

1.限定条件,就是限定递归退出的条件,就是上面的if(num == 1),

   我们设想一下求和的最后一步应该是+1,所以我们就把他最后一次递归的条件设为退出递归的条件,也就是只有

   最后一次递归的时候才执行那条语句。

2.递归的次数不能太大,否则它会导致内存溢出。

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. //打印出博客文件夹下的所有图片的名称  
  2. public class digui {  
  3.       
  4.     public static void main(String[] args) {  
  5.        File f = new File("C:\\Users\\Administrator\\Desktop\\博客");                   
  6.        new Show( ).showPng(f);                
  7.     }  
  8. }  
[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. public class Show   
  2. {   
  3.  public void showPng(File f)  
  4.  {  
  5.   if(f.isFile()&& f.getName().endsWith(".png")  )//和过滤器的原理是相同的,如果是png文件就打印出名字  
  6.   {  
  7.    //问题:为什么会打印那么多啊  
  8.    System.out.println(f);  
  9.   }  
  10.     
  11.   else if(f.isDirectory())//如果是目录,就将目录中的文件遍历,并依次此判断他是文件合适目录  
  12.   {  
  13.        File[] files1 = f.listFiles();  
  14.     for(File file : files1)  
  15.     {  
  16.      showPng(file);  
  17.     }  
  18.   }  
  19.  }  
  20.    
  21. }  


  ------- android培训java培训、期待与您交流! ----------

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中的文件过滤器接口主要有两种:`FileFilter`和`FilenameFilter`。它们都可以用于过滤文件,让我们只获取需要的文件。 `FileFilter`过滤器接口定义了一个用于判断文件是否符合要求的方法`accept(File pathname)`,该方法返回一个布尔值,符合要求的文件返回`true`,否则返回`false`。下面是一个简单的实现示例: ```java import java.io.File; import java.io.FileFilter; public class MyFileFilter implements FileFilter { private String ext; public MyFileFilter(String ext) { this.ext = ext; } @Override public boolean accept(File file) { if (file.isFile() && file.getName().endsWith(ext)) { return true; } return false; } } ``` 上面的代码实现了一个过滤器,只保留指定扩展名的文件。使用方法如下: ```java public static void main(String[] args) { File dir = new File("C:/mydir"); FileFilter filter = new MyFileFilter(".txt"); File[] files = dir.listFiles(filter); for (File f : files) { System.out.println(f.getName()); } } ``` 上面的代码将输出`C:/mydir`目录下所有扩展名为`.txt`的文件名。 `FilenameFilter`过滤器接口也定义了一个用于判断文件是否符合要求的方法`accept(File dir, String name)`,该方法返回一个布尔值,符合要求的文件返回`true`,否则返回`false`。下面是一个简单的实现示例: ```java import java.io.File; import java.io.FilenameFilter; public class MyFilenameFilter implements FilenameFilter { private String ext; public MyFilenameFilter(String ext) { this.ext = ext; } @Override public boolean accept(File dir, String name) { if (name.endsWith(ext)) { return true; } return false; } } ``` 使用方法与`FileFilter`似,只是需要把过滤器传递给`File`的`list()`或`listFiles()`方法,如下所示: ```java public static void main(String[] args) { File dir = new File("C:/mydir"); FilenameFilter filter = new MyFilenameFilter(".txt"); String[] files = dir.list(filter); for (String name : files) { System.out.println(name); } } ``` 上面的代码将输出`C:/mydir`目录下所有扩展名为`.txt`的文件名。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值