黑马程序员——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文件

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

import java.io.File;
import java.io.FilenameFilter;


public class MyFilter implements FilenameFilter
{
	private String  ext;
	public MyFilter(String ext) {
		super();
		this.ext = ext;
	}
	@Override
	public boolean accept(File f, String name)
	{
		return name.endsWith(ext);
	}
}
<p>public class FileDemo {</p><p> public static void main(String[] args) {
  //传入规则
  MyFilter mf = new MyFilter(".txt");
  
  File f = new File("C://");
  
  //调用File的listFiles对象
  File[] files = f.listFiles(mf);
  
  for(File file : files)
  {
   System.out.println(file);
  }
 }</p><p>}</p>

3.递归

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

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

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

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

public class digui {

	public static void main(String[] args) {
		
        System.out.println(getSum(10));
	}

	public static int getSum(int num)
	{
		if (num == 1)
			return 1;
		return num + getSum(num - 1);
	}
}

使用递归的注意事项:

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

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

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

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

//打印出博客文件夹下的所有图片的名称
public class digui {
	
	public static void main(String[] args) {
	   File f = new File("C:\\Users\\Administrator\\Desktop\\博客");       	  	   
	   new Show( ).showPng(f);	  	   		
	}
}
public class Show 
{ 
 public void showPng(File f)
 {
  if(f.isFile()&& f.getName().endsWith(".png")  )//和过滤器的原理是相同的,如果是png文件就打印出名字
  {
   //问题:为什么会打印那么多啊
   System.out.println(f);
  }
  
  else if(f.isDirectory())//如果是目录,就将目录中的文件遍历,并依次此判断他是文件合适目录
  {
       File[] files1 = f.listFiles();
    for(File file : files1)
    {
     showPng(file);
    }
  }
 }
 
}



 

 

 

 

 

 

 

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值