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);
}
}
这段时间也没啥事做,于是就将编程思想翻开看看。小研究下IO,以上是书中的练习,主要是用到了FilenameFilter接口过滤文件名。其中FileFilter类实现了FilenameFilter接口。在调用File.list(filenameFilter)时查看了下jdk的源代码:如下
public String[] list(FilenameFilter filter) {
String names[] = list();
if ((names == null) || (filter == null)) {
return names;
}
ArrayList v = new ArrayList();
for (int i = 0 ; i < names.length ; i++) {
if (filter.accept(this, names[i])) {
v.add(names[i]);
}
}
return (String[])(v.toArray(new String[v.size()]));
}
可以看到是将指定file对象下的文件名一一与指定的格式比较,filter中的方法需要自己实现。
有啥不对之处,忘各位指正。欢迎交流。
分享到:
相关推荐
【公益知识库zscc.club】43-IO流(列出目录下所有内容-递归).avi
【公益知识库zscc.club】44-IO流(列出目录下所有内容-带层次).avi
IO流读取和创建文件IO流读取和创建文件IO流读取和创建文件IO流读取和创建文件IO流读取和创建文件
统一修改目录下文件后缀名,IO流的基本操作,递归遍历目录下所有文件,找到符合条件的后缀并修改
Java中文件IO流.pdf 学习资料 复习资料 教学资源
IO流文件的复制
模拟网络通信IO流文件传递
JAVAIO流总结宝典,分享给大家,总结较为全面
java新IO文件流java新IO文件流java新IO文件流java新IO文件流java新IO文件流java新IO文件流java新IO文件流
主要介绍了Java基于IO流读取文件的方法,涉及Java文件流操作的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
java 使用IO流实现文件的复制 java 使用IO流实现文件的复制
IO流 javaio java 流
通过IO流把文件传到前端并下载
标准io流复制文件
IO流文件操作(注释版),很详细,很实用
通过java编程,实现使用IO流下载服务器文件,为HTTP层文件传输
io流中的文件操作,直接粘贴去eclipse或者cmd就可以运行。
编写一个java应用程序,将一个包含多个子目录和文件的目录复制到另外一个指定的目录下。 实验要求 1)欲复制的目录中包含的文件数和子目录层次未知,必须在程序执行时获得这些信息。 2)显示欲复制的目录的...
2、常用21个IO流:FileWriter、FileReader、CharArrayReader、CharArrayWriter、CharSequence、OutputStreamWriter、FileOutputStream、InputStreamReader、PrintWriter、BufferedReader、InputStream、...
知道目录后,可以列出该目录下所属的文件 import java.awt.*; import java.awt.event.*; import java.io.*; import javax.swing.*; //列出目录下的文件 public class ListFileDemo extends JFrame{ JTextField ...