A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zhanghua 黑马帝   /  2011-11-16 18:28  /  2931 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 zhanghua 于 2011-11-21 13:56 编辑

在写程序时遇到一个问题,怎么让file类列出来指定格式的文件,而不是所有的文件类型??

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

5 个回复

倒序浏览
import java.io.*;
import java.util.*;

public class DirList3 {
        public static void main(String[] args) {
                File path = new File(".");
                //存放文件名数组的list
                ArrayList<String> fStr = new ArrayList<String>();
                //存放目录的List
                ArrayList<File> fls = new ArrayList<File>();
                //文件过滤器,主要是列出指定目录下的所有文件包括其子目录下的所有文件,并列出符合表达式的文件名
                FileFilter ff = new FileFilter(args[0]);
                //列出所有目录,并将其添加到fls中
                ff.listAllDir(path, fls);
                File f = null;
                String[] list = null;
                for(Iterator<File> iter = fls.iterator(); iter.hasNext(); ) {
                        f = iter.next();
                        list = f.list(ff);
                        if(list.length != 0)
                                fStr.addAll(Arrays.asList(list));
                }
                //列出所有符合的文件名
                System.out.println(Arrays.toString(fStr.toArray(new String[fStr.size()])));        }
       
}

FileFilter类

import java.io.File;
import java.io.FilenameFilter;
import java.util.ArrayList;
import java.util.regex.Pattern;


public class FileFilter implements FilenameFilter {

        private Pattern pattern;
       
        public FileFilter(String regex) {
                pattern = Pattern.compile(regex);
        }
       
        public boolean accept(File dir, String name) {
                // TODO Auto-generated method stub
                return pattern.matcher(name).matches();
        }
       
        public void listAllDir(File dir, ArrayList<File> fls) {
                File[] fs = dir.listFiles();
                for(File item:fs) {
                        if(item.isDirectory()) {
                                fls.add(item);
                                listAllDir(item, fls);
                        }
                }
                fls.add(dir);
        }

}

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1

查看全部评分

回复 使用道具 举报
咪咪 来自手机 黑马帝 2011-11-16 19:40:52
藤椅
老师讲的时候好像用到内部类了。并通过文件endwith 方法判断文件后缀名过滤的。

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1 最好贴下代码了。

查看全部评分

回复 使用道具 举报
本帖最后由 骚灵小情歌 于 2011-11-16 19:57 编辑

首先遍历
for(File file : files)
{
if(file.isDirectory())//如果是文件夹,继续方法进去遍历
----
else//如果不是,拟定取出哪一类
{
  if(file.getName().endsWith("这里写想要的文件的后缀或者文件名"));
   list.add(file);   放到一个地方先存着
}

}

评分

参与人数 1技术分 +2 收起 理由
宁超 + 2 主要代码红色就可以了。

查看全部评分

回复 使用道具 举报
file.getName().endsWith("这里写想要的文件的后缀或者文件名"));把你指定的文件类型写进去,就可以了。这样
file类列出来的就是指定格式的文件,而不是所有的文件类型
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马