黑马程序员技术交流社区
标题:
为什么此异常要进行两次异常处理抛和try那?
[打印本页]
作者:
杨青
时间:
2013-5-25 12:07
标题:
为什么此异常要进行两次异常处理抛和try那?
package filestudy;
import java.io.*;
import java.util.*;
public class TestDemo {
/**
* @param args
* 获取指定目录下,指定扩展名的文件(包含子目录中的)
* 这些文件的绝对路径写入到一个文本文件中。
* 简单说,就是建立一个指定扩展名的文件的列表。
*
* 思路:
* 1,必须进行深度遍历。
* 2,要在遍历的过程中进行过滤。将符合条件的内容都存储到容器中。
* 3,对容器中的内容进行遍历并将绝对路径写入到文件中。
*/
public static void main(String[] args)throws IOException {
// TODO Auto-generated method stub
File dir=new File("d:\\workspace");
FilenameFilter filter=new FilenameFilter(){
public boolean accept(File dir,String name){
return name.endsWith(".java");
}
};
List<File> list=new ArrayList<File>();
getList(dir,filter,list);
File file=new File(dir,"javalist.txt");
writeFile(file,list);
}
public static void getList(File dir,FilenameFilter filter,List<File> list) throws IOException{
File[] files=dir.listFiles();
//此处为什么没有进行循环,这是个问题。
for(File file:files){
if(file.isDirectory())
getList(file,filter,list);
else{
if(filter.accept(file,file.getName())){;
list.add(file);
}
}
}
}
public static void writeFile(File file,List<File> list) throws IOException{
BufferedWriter bufw=null;
//此处为什么要再一次进行异常处理,这是个问题。
try{
bufw=new BufferedWriter(new FileWriter(file));
for(File f:list){
bufw.write(f.getAbsolutePath());
bufw.newLine();
bufw.flush();
}
}
catch(IOException e){
throw new RuntimeException("write fail");
}
finally{
try{
if(bufw!=null)
bufw.close();
}
catch(IOException e){
throw new RuntimeException("close fail");
}
}
}
}
复制代码
作者:
JinnyZh
时间:
2013-5-25 16:42
33行, 将dir目录下的所有文件的路径名存入File[]数组中
35行, 遍历file数组, 再进行判断, 如果是文件夹, 就递归, 继续判断, 如果是文件就直接添加到list集合中
//
47行的异常处理, 是关流的异常处理, 在1.6版本之前,需要这样写,而且很麻烦, 在1.6之后就不需要这样了, 因为流这个类都实现了Closeable 这个接口,
只需要try(创建的流) {与流相关的代码} 这样就不需要关流了,也不需要异常处理了,建议楼主这样做, 可能你看的视频比较老了吧
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2