本帖最后由 天涯追梦 于 2014-4-26 11:15 编辑
下面代码是:建立指定文件的清单文件。 将指定目录下的指定文件(包含子目录)的绝对路径写入到一个文件中。 该文件就作为指定文件的清单文件。 例如:获取一个想要的指定文件的集合。获取javase_avi下(包含子目录)的所有的.avi 的文件对象。并存储到集合中。
问题是:我如果想获取整个e盘中的.avi 文件,而不是某一文件夹的,应该怎么修改下面程序呢?
如果是修改File dir = new File("e:\\javase_avi"); 为 File dir = new File("e:\\");为什么会报错:java.lang.NullPointerException
请高手作答,谢谢!!
- import java.io.BufferedWriter;
- import java.io.File;
- import java.io.FileFilter;
- import java.io.FileWriter;
- import java.io.IOException;
- import java.util.ArrayList;
- import java.util.List;
- public class Test {
-
- public static void main(String[] args) throws IOException {
-
- File dir = new File("e:\\javase_avi");
- List<File> list = fileList(dir, ".avi");
- File destFile = new File("avilist.txt");
- write2File(list, destFile);
- }
- public static void write2File(List<File> list, File destFile) throws IOException {
- //1,需要流对象,既然是写入字符。
- BufferedWriter bufw = null;
- try{
- bufw = new BufferedWriter(new FileWriter(destFile));
-
- //2,遍历集合。
- for(File file : list){
-
- bufw.write(file.getAbsolutePath());
- bufw.newLine();
- bufw.flush();
-
- }
-
- }finally{
- if(bufw!=null){
- try {
- bufw.close();
- } catch (IOException e) {
-
- throw new RuntimeException("关闭失败");
- }
- }
- }
-
- }
- /**
- * 定义一个获取指定过滤器条件的文件的集合。
- */
- public static List<File> fileList(File dir, String suffix) {
- // 1,定义集合。
- List<File> list = new ArrayList<File>();
- // 2,定义过滤器。
- FileFilter filter = new FileFilterBySuffix(suffix);
- getFileList(dir, list, filter);
- return list;
- }
- public static void getFileList(File dir, List<File> list, FileFilter filter) {
- // 1,通过listFiles方法,获取dir当前下的所有的文件和文件夹对象。
- File[] files = dir.listFiles();
- // 2,遍历该数组。
- for (File file : files) {
- // 3,判断是否是文件夹。如果是,递归。如果不是,那就是文件,就需要对文件进行过滤。
- if (file.isDirectory()) {
- getFileList(file, list, filter);
- } else {
- // 4,通过过滤器对文件进行过滤
- if (filter.accept(file)) {
- list.add(file);
- }
- }
- }
- }
- }
复制代码
|