黑马程序员技术交流社区
标题:
【黑马云青年 胡浩】这到底是怎么回事,帮我瞅瞅
[打印本页]
作者:
胡浩
时间:
2013-5-26 16:17
标题:
【黑马云青年 胡浩】这到底是怎么回事,帮我瞅瞅
package com.DoFileWork;
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;
import com.File.FilterByName;
public class work_ioAndFile {
/*
*
* 获取指定目录下,指定扩展名的文件(包含子目录中的)
* 这些文件的绝对路径写入到一个文本文件中。
*
* 简单说,就是建立一个指定扩展名的文件的列表。
*
* 思路:
* 1,必须进行深度遍历。
* 2,要在遍历的过程中进行过滤。将符合条件的内容都存储到容器中。
* 3,对容器中的内容进行遍历并将绝对路径写入到文件中。
*
*
*/
public static void main(String[] args) {
File file=new File("E:\\使用Java实现面向对象编程");
//匿名内部类,创建对象+重写一次欧
List<File> fileList=new ArrayList<File>();
FilterByName filterByName=new FilterByName(".java");
getListFiles(file, filterByName, fileList);
System.out.println(fileList.size());
File f=new File(file, "java.txt");
writeToFile(fileList, f);
}
/*
* 深度遍历文件夹,将其中所有包含.java文件的的文件对象放入指定的容器List<File>中
*/
private static void getListFiles(File dir,FilenameFilter filter ,List<File> fileList){
File [] files=dir.listFiles();
for(File fi:files){
if(fi.isDirectory()){
getListFiles(fi, filter, fileList);
}
else{
//对遍历到的文件进行过滤器的过滤。将符合条件File对象,存储到List集合中。
if(filter.accept(dir, dir.getName())){
fileList.add(fi);
}
}
}
}
private static void writeToFile(List<File> fileList,File destFile){
BufferedWriter bfw=null;
try {
bfw=new BufferedWriter(new FileWriter(destFile));
for(File fi:fileList){
System.out.println(fi.getAbsolutePath());
bfw.write(fi.getAbsolutePath());
bfw.newLine();
bfw.flush();
}
} catch (IOException e) {
throw new RuntimeException("写入失败");
}
finally{
if(bfw!=null){
try {
bfw.close();
} catch (IOException e) {
throw new RuntimeException("关闭流失败");
}
}
}
}
}
复制代码
过滤器不起作用,没有过滤到.java的文件,应该是getListFiles()这个方法出了问题,但是我就是不知道哪里错了,也许当局者迷嘛,复制到eclipse帮我看看。
作者:
顾玲玉
时间:
2013-5-27 12:51
FilterByName 这个类没有贴出来。自己debug调试下,跟踪下代码,看下哪步不是你预期的
作者:
Miss小强
时间:
2013-5-27 15:03
本帖最后由 Miss小强 于 2013-5-27 15:08 编辑
这道题目的根源在这里:
getListFiles(File dir,FilenameFilter filter ,List<File> fileList)
你这样得到的只是引用,对原来的fileList没有影响,也就是说文件根本没有添加进去;
解决方法:
在getListFiles这个方法中自己定义一个fileList集合,然后以返回值的形式返回;
主函数中用一个list集合进行接收就ok了。。。
这里必须要明白一点:引用传递和值传递。慢慢琢磨吧。。。
黑马云青年为你解答。。。
getListFiles(File dir,FilenameFilter filter){
List<File> fileList=new ArrayList<File>();
//添加过滤代码;
return fileList;
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2