黑马程序员技术交流社区

标题: java IO的一道练习题,自己想到的一道练习题目 [打印本页]

作者: 王士铭    时间: 2011-7-31 19:22
标题: java IO的一道练习题,自己想到的一道练习题目
今天我想计算一下D盘下各个目录下有几个avi的文件然后计划一下花多少天去看完
发现D盘中很多文件夹下都有avi文件 一个一个文件夹进去看太花时间了
这不就想到这个问题,希望大家帮我实现一下

求D盘下有几个avi的文件
我暂时实现的是 test文件夹下有22个avi文件 test2文件夹有12个avi文件
实际我希望输出的是D盘下有 34个avi文件
[ 本帖最后由 王士铭 于 2011-07-31  19:23 编辑 ]
作者: 李龙    时间: 2011-7-31 21:23
标题: 回复 楼主 的帖子
我写的例子有点简单,不过能解决问题,看看行不,有问题告我
  1. import java.io.File;


  2. public class Test_7_31  {
  3.          //这里标记符合文件的个数
  4.         private static int x = 0;

  5.         public static void main(String[] args) {
  6.                 //设置,你明白
  7.                 String extension = "jpg";
  8.                 String pathName ="E:/ww";
  9.                 //File file = new File("E:/ww/");
  10.                 search(pathName,extension);
  11.                 System.out.println(x);
  12.         }
  13.        
  14.        
  15.         private static void search(String pathName,String fileName) {       
  16.                 File file = new File(pathName);
  17.                 String str[] = file.list();
  18.                 File directoryName =null;
  19.                 for(String s:str){
  20.                         //检测directoryName是否以/为结尾(系统分隔符)
  21.                     if(pathName.endsWith(File.separator)){
  22.                             directoryName = new File(pathName+s);
  23.                     }
  24.                            
  25.                     else{
  26.                             directoryName = new File(pathName+File.separator+s);
  27.                     }
  28.                     
  29.                     //若果directoryName是一个文件并且扩展名为fileName x++
  30.                     int i = s.lastIndexOf('.');
  31.                     if(directoryName.isFile()&&s.substring(i+1).equalsIgnoreCase(fileName))
  32.                     {
  33.                             x++;
  34.                     }
  35.                     
  36.                     //检测子目录   
  37.                      if(directoryName.isDirectory()){
  38.                         search(directoryName.toString(),fileName);
  39.                     }
  40.                 }
  41.         }
  42. }
复制代码
[ 本帖最后由 李龙 于 2011-07-31  21:25 编辑 ]
作者: 匿名    时间: 2011-8-1 13:27
王士铭看到留言后请留下你的联系方式!!
作者: 匿名    时间: 2011-8-1 14:17
在File的list方法中可以接受一个FilenameFiter参数,通过这个参数股可以只列出符合条件的文件。
FilenameFiter接口里面有一个accept(File dir , String name)方法,这个方法可以依次对指定的File的所有子目录、子文件夹进行迭代、如果返回真true,则list方法就会列出该子目录或者子文件夹。

如下程序:[code=java]package cn.itcast.heima
import java.io.*;

public class FilenameFilterTest
{
        public static void main(String[] args)
        {
                File file = new File("d:\\");
                String[] nameList = file.list(new MyFilenameFilter());
                for (String name : nameList)
                {
                        System.out.println(name);
                }
        }
}
//实现自己的FilenameFilter实现类
class MyFilenameFilter implements FilenameFilter
{
        public boolean accept(File dir, String name)
        {
                //如果文件名以.java结尾返回true
                return name.endsWith(".avi")
        }
}[/code]
作者: 匿名    时间: 2011-8-1 14:21
标题: 回复 板凳 的帖子
学习了!原来可以这么简单!自己的知识还是差太多了!
作者: 匿名    时间: 2011-8-2 00:41
标题: 回复 板凳 的帖子
原来使用FilenameFilter可以这么简单,学习了,我之前把记录数目的 变量定义在了局部所以没迭代一个目录就输出了一次




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2