package cn.itcast.io.p3.test;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.FilenameFilter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/*
*
* 获取指定目录下,指定扩展名的文件(包含子目录中的)
* 这些文件的绝对路径写入到一个文本文件中。
*
* 简单说,就是建立一个指定扩展名的文件的列表。
*
* 思路:
* 1,必须进行深度遍历。
* 2,要在遍历的过程中进行过滤。将符合条件的内容都存储到容器中。
* 3,对容器中的内容进行遍历并将绝对路径写入到文件中。
*
*
*/
public class Test {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
File dir = new File("e:\\java0331");
//自定义扩展名过滤器
FilenameFilter filter = new FilenameFilter(){
@Override
public boolean accept(File dir, String name) {
return name.endsWith(".java");
}
};
List<File> list = new ArrayList<File>();
getFiles(dir,filter,list);
File destFile = new File(dir,"javalist.txt");
write2File(list,destFile);
}
/**
* 对指定目录中的内容进行深度遍历,并按照指定过滤器,进行过滤,
* 将过滤后的内容存储到指定容器List中。
* @param dir
* @param filter
* @param list
*/
public static void getFiles(File dir,FilenameFilter filter,List<File> list){
File[] files = dir.listFiles();
for(File file : files){
if(file.isDirectory()){
//递归啦!
getFiles(file,filter,list);
}else{
//对遍历到的文件进行过滤器的过滤。将符合条件File对象,存储到List集合中。
if(filter.accept(dir, file.getName())){
list.add(file);
}
}
}
}
public static void write2File(List<File> list,File destFile)throws IOException{
BufferedWriter bufw = null;
try {
bufw = new BufferedWriter(new FileWriter(destFile));
for(File file : list){
bufw.write(file.getAbsolutePath());
bufw.newLine();
bufw.flush();
}
} /*catch(IOException e){
throw new RuntimeException("写入失败");
}*/finally{
if(bufw!=null)
try {
bufw.close();
} catch (IOException e) {
throw new RuntimeException("关闭失败");
}
}
}
}
分享到:
相关推荐
`FilenameFilter`接口虽然简单,但在处理大量文件时能有效提高效率,因为它允许你在遍历目录时立即过滤掉不需要的文件,而无需加载整个文件列表到内存。这对于处理大型目录结构或者网络上的文件尤其有用,可以减少...
除了简单的字符串匹配外,还可以使用更复杂的文件过滤逻辑,例如自定义的 `FilenameFilter` 接口实现来筛选文件。 通过上述知识点的学习,可以更好地理解如何在 Java 中遍历文件夹并处理其中的文件,特别是在针对...
### 黑马程序员入学Java精华总结 #### 一、Java概述与基础知识 1. **何为编程?** - 编程是指通过编写计算机能够理解的指令来解决问题或完成特定任务的过程。这些指令通常被组织成算法,并使用某种编程语言实现。...
### 黑马程序员入学Java知识 #### Java概述与基础知识 1. **何为编程?** - 编程是通过特定的计算机语言来编写指令,让计算机执行一系列任务的过程。 2. **Java语言概述,历史、特点** - **概述**:Java是一种...
为了更方便地查找和处理具有特定扩展名的文件,Java提供了`FilenameFilter`接口,该接口可以被用来创建自定义的文件名过滤器。通过实现这个接口,用户可以根据自己的需求编写过滤逻辑,从而在遍历目录时只获取符合...
10. 文件过滤:可以创建自定义过滤器,用于按特定条件筛选文件和目录,如`FilenameFilter`和`DirectoryWalker`。 11. 输入/输出异常处理:提供了一套更易用的异常类,如`IOException`的子类,以更精确地表示I/O问题...
### 黑马程序员入学Java知识(精华总结) ...##### 3、文件过滤器java.io.FilenameFilter `FilenameFilter`接口用于筛选文件名。 ##### 4、流 流是Java中用于读写数据的基本概念,包括输入流和输出流。
5. **文件过滤器**:在遍历过程中,我们可能会想要根据文件名、扩展名或其他属性筛选文件。Java的`FileFilter`和`FilenameFilter`接口以及`Predicate`类允许我们定义自定义过滤规则。 6. **异常处理**:文件系统...
- **文件过滤器**: 可以通过自定义`FilenameFilter`或`FileFilter`接口来筛选文件。 - **文件观察者**: 利用`java.nio.file.WatchService`可以监听文件系统的变更事件。 - **并发访问**: 处理大量文件时,可以考虑...
在处理文件时,我们可以利用过滤器来选取符合特定格式的文件,例如只选择`.txt`文本文件而忽略其他类型的文件,或者排除目录。在本场景下,我们需要实现一个过滤器来过滤掉目录文件和非`.txt`文件。 首先,让我们...
- 如果应用允许用户按文件类型筛选,可能用到了`FilenameFilter`接口,自定义过滤规则。 8. **文件复制**: - 可能使用`BufferedInputStream`和`BufferedOutputStream`结合`FileInputStream`和`FileOutputStream`...
Java 文件过滤器是一种在Java编程中用于筛选特定类型或满足特定条件的文件的工具。它在处理大量文件时尤其有用,比如在遍历目录结构、查找特定文件或进行批量操作时。这个压缩包中的"FileFilter"可能包含了实现这一...
这个过滤器应该检查每个文件的扩展名是否为".txt"。例如: ```java File dir = Environment.getExternalStorageDirectory(); FileFilter filter = new FilenameFilter() { public boolean accept(File dir, ...
在Java编程中,`FileUtil`通常是一个自定义的工具类,用于封装常见的文件操作,以便在项目中方便地处理文件。这个类可以提供一系列静态方法,帮助开发者执行读写文件、创建、删除、移动、复制文件等任务,极大地提高...
可以结合这些接口创建过滤器,如查找特定扩展名的文件或只列出目录。 6. **读写字符集**: - `Charsets` 类提供了一些标准的字符集常量,如 `Charsets.UTF_8`,简化了字符集的使用。 7. **线程安全的 I/O**: - ...
5. **文件过滤器**: BH-File-Explorer可能包含文件过滤功能,允许用户按扩展名筛选文件。这可以通过实现FileFilter接口来实现,或者使用预定义的FilenameFilter。 6. **目录树视图**: 为了方便用户浏览文件系统,...
在Java编程中,`FilenameFilter` 是一个接口,它用于过滤文件名,允许我们根据特定的文件扩展名或模式选择性地列出目录中的文件。在给定的标题和描述中,我们关注的是如何使用 `FilenameFilter` 来查看并列出只包含 ...
- 实现自定义的FilenameFilter类(MyFilter),用于过滤图片文件,仅允许特定扩展名的文件通过。 ### 关键知识点 1. **Java GUI编程**:使用Swing或AWT库创建图形用户界面,包括Frame、Panel、Button等组件。 2. ...
通过自定义`FilenameFilter`,我们可以根据文件的后缀名筛选文件。 下面是一个简单的示例,展示如何创建一个`FilenameFilter`来获取所有.txt文件: ```java import java.io.*; public class GetFileListDemo { ...