那么今天下班,学习了一下Java编程中IO流的一些阶段性的练习,其实我已经把之前的都忘的超不多了,等后面我还要慢慢的复习一下。
那么是阶段性的练习,那么就该有一个题目,今天的题目就是从网上找的,内容大致为:
获取指定目录下,指定扩展名的文件(包含子目录中的),这些文件的绝对路径写入到一个文本文件中。简单的说,就是建立一个指定扩展名的文件的列表。
思路:
必须进行深度遍历;
要在遍历的过程中进行过滤,将符合条件的内容都存储到容器中;
对容器中的内容进行遍历,并将绝对路径写入到文件中。
代码如下:
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;
public class Text {
public static void main(String[] args) {
File dir = new File("java01");
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);
}
}
}
}
/**
* 将读取到的文件写入到文件中
* @param list
* @param destFile
* @throws IOException
*/
public static void write2file(List<File> list,File destFile){
BufferedWriter bufw = null;
try {
bufw = new BufferedWriter(new FileWriter(destFile));
for (File file : list) {
bufw.write(file.getAbsolutePath());
bufw.newLine();
bufw.flush();
}
} catch (Exception e) {
throw new RuntimeException("写入失败");
}finally{
if(bufw!=null){
try {
bufw.close();
} catch (Exception e2) {
throw new RuntimeException("关闭失败");
}
}
}
}
}
其实大家多看看就能看懂的。多去回顾一下之前的知识,多练习一下你认为看不起眼的小程序。
其实大家多看看就能看懂的。多去回顾一下之前的知识,多练习一下你认为看不起眼的小程序。