黑马程序员技术交流社区

标题: Java中获取指定目录下所有的avi文件并将avi文件的绝对路径存储到txt中 [打印本页]

作者: 王春蕾    时间: 2014-4-25 08:19
标题: Java中获取指定目录下所有的avi文件并将avi文件的绝对路径存储到txt中
代码如下:
  1. package cn.itcast.io.file.getlist;

  2. //import java.awt.List;
  3. import java.io.BufferedWriter;
  4. import java.io.File;
  5. import java.io.FileFilter;
  6. import java.io.FileWriter;
  7. import java.io.IOException;
  8. import java.util.ArrayList;
  9. import java.util.List;

  10. public class GetCertainListDemo {

  11.         public static void main(String[] args) {
  12.                 // TODO Auto-generated method stub
  13.                 /**
  14.                  * 联系:将指定目录中的所有java文件(包含子目录)的绝对路径写入到指定的java文件中 思路: 1、对指定的目录进行遍历,包含子目录的边路
  15.                  * 2、在遍历中加入过滤器 3、将满足过滤器的文件进行临时存储 4、将存储的数据的指定的信息,比如绝对路径写入到指定文件中去
  16.                  */
  17.                 File dir = new File("F:\\教学视频\\Java\\Java基础班_2013年4月\\day11_avi");
  18.                 // 创建一个文件过滤器,可以过滤指定后缀名的文件
  19.                 FileFilter filter = new FileFilterBySuffix(".avi");
  20.                 // 创建一个集合,用于存储符合过滤条件的文件
  21.                 List<File> list = new ArrayList<File>();
  22.                 // 定义一个方法,用于对指定的目录进行遍历,并传入指定的过滤器和临时容器
  23.                 listAllFiles(dir, filter, list);
  24.                 System.out.println(list.size());
  25.                 // 1、创建一个用于存储java文件路径的文件
  26.                 File file = new File(dir, "avi.txt");
  27.                 writeToFile(list, file);
  28.         }
  29.         /**
  30.          * 将list中存储的File对象的指定的信息写入到文件中
  31.          * @param list
  32.          * @param file
  33.          * @throws IOException
  34.          */
  35.         private static void writeToFile(List<File> list, File file) {
  36.                 // TODO Auto-generated method stub
  37.                 BufferedWriter bufw = null;
  38.                 try {
  39.                         // 1、既然要将文本数据写入到一个文件中,就需要使用io技术
  40.                         bufw = new BufferedWriter(new FileWriter(file, true));

  41.                         // 1、对list集合进行遍历
  42.                         for (File f : list) {
  43.                                 bufw.write(f.getAbsolutePath());
  44.                                 bufw.newLine();
  45.                                 bufw.flush();
  46.                         }
  47.                 } catch (IOException e) {
  48.                         // TODO: handle exception
  49.                         e.printStackTrace();
  50.                 } finally {
  51.                         if (bufw != null) {
  52.                                 try {
  53.                                         bufw.close();
  54.                                 } catch (Exception e2) {
  55.                                         // TODO: handle exception
  56.                                         throw new RuntimeException("关闭");
  57.                                 }
  58.                         }

  59.                 }

  60.         }

  61.         /**
  62.          * 在遍历之后,将满足条件的file存储到临时容器中
  63.          *
  64.          * @param dir
  65.          * @param filter
  66.          * @param list
  67.          */
  68.         private static void listAllFiles(File dir, FileFilter filter,
  69.                         List<File> list) {
  70.                 // TODO Auto-generated method stub
  71.                 // 对指定的目录进行遍历
  72.                 File[] files = dir.listFiles();
  73.                 for (File file : files) {
  74.                         // 如果是目录,进行递归
  75.                         if (file.isDirectory()) {
  76.                                 listAllFiles(dir, filter, list);
  77.                         } else {
  78.                                 // 如果是文件,就将文件传递给过滤器进行过滤
  79.                                 if (filter.accept(file)) {
  80.                                         list.add(file);
  81.                                 }
  82.                         }
  83.                 }
  84.         }
  85. }
复制代码
运行的时候出现内存溢出,是怎么回事呢?
作者: 霍振鹏    时间: 2014-4-25 11:11
本帖最后由 霍振鹏 于 2014-4-25 11:14 编辑

我的为什么识别不了FileFilterBySuffix这个类呢?你引入 了第三方jar包了吧?
作者: 王春蕾    时间: 2014-4-25 11:14
霍振鹏 发表于 2014-4-25 11:11
我的为什么识别不了FileFilterBySuffix这个类呢?你引入 了第三方jar包了吧?

{:3_47:}因为那是我自定义的一个筛选后缀名的类;P
作者: 霍振鹏    时间: 2014-4-25 11:25
本帖最后由 霍振鹏 于 2014-4-25 11:46 编辑
王春蕾 发表于 2014-4-25 11:14
因为那是我自定义的一个筛选后缀名的类

好吧  我无知了!
给你点建议吧,既然想让大家帮忙找问题 ,就把完整的源码放出了,,我试了一下表示没问题,不知道你的FileFilterBySuffix是怎么写的
  1. package cn.itcast.io.file.getlist;

  2. import java.io.File;
  3. import java.io.FileFilter;

  4. public class FileFilterBySuffix implements FileFilter {

  5.         private String str;
  6.         @Override
  7.         public boolean accept(File pathname) {
  8.                 // TODO Auto-generated method stub
  9.                 if(pathname.isFile()&&pathname.toString().endsWith(str))
  10.                         return true;
  11.                 return false;
  12.         }
  13.        
  14.         public FileFilterBySuffix(String str)
  15.         {
  16.                 this.str=str;
  17.         }

  18. }
复制代码
  1. package cn.itcast.io.file.getlist;

  2. //import java.awt.List;
  3. import java.io.BufferedWriter;
  4. import java.io.File;
  5. import java.io.FileFilter;
  6. import java.io.FileWriter;
  7. import java.io.IOException;
  8. import java.util.ArrayList;
  9. import java.util.List;

  10. public class GetCertainListDemo {

  11.         public static void main(String[] args) {
  12.                 // TODO Auto-generated method stub
  13.                 /**
  14.                  * 联系:将指定目录中的所有java文件(包含子目录)的绝对路径写入到指定的java文件中 思路: 1、对指定的目录进行遍历,包含子目录的边路
  15.                  * 2、在遍历中加入过滤器 3、将满足过滤器的文件进行临时存储 4、将存储的数据的指定的信息,比如绝对路径写入到指定文件中去
  16.                  */
  17.                 File dir = new File("G:\\我的课外学习\\java\\csdn\\第二部分");
  18.                 // 创建一个文件过滤器,可以过滤指定后缀名的文件
  19.                 FileFilter filter = new FileFilterBySuffix(".avi");
  20.                
  21.                 // 创建一个集合,用于存储符合过滤条件的文件
  22.                 List<File> list = new ArrayList<File>();
  23.                 // 定义一个方法,用于对指定的目录进行遍历,并传入指定的过滤器和临时容器
  24.                 listAllFiles(dir, filter, list);
  25.                 System.out.println(list.size());
  26.                 // 1、创建一个用于存储java文件路径的文件
  27.                 File file = new File(dir, "avi.txt");
  28.                 writeToFile(list, file);
  29.         }
  30.         /**
  31.          * 将list中存储的File对象的指定的信息写入到文件中
  32.          * @param list
  33.          * @param file
  34.          * @throws IOException
  35.          */
  36.         private static void writeToFile(List<File> list, File file) {
  37.                 // TODO Auto-generated method stub
  38.                 BufferedWriter bufw = null;
  39.                 try {
  40.                         // 1、既然要将文本数据写入到一个文件中,就需要使用io技术
  41.                         bufw = new BufferedWriter(new FileWriter(file, true));

  42.                         // 1、对list集合进行遍历
  43.                         for (File f : list) {
  44.                                 bufw.write(f.getAbsolutePath());
  45.                                 bufw.newLine();
  46.                                 bufw.flush();
  47.                         }
  48.                 } catch (IOException e) {
  49.                         // TODO: handle exception
  50.                         e.printStackTrace();
  51.                 } finally {
  52.                         if (bufw != null) {
  53.                                 try {
  54.                                         bufw.close();
  55.                                 } catch (Exception e2) {
  56.                                         // TODO: handle exception
  57.                                         throw new RuntimeException("关闭");
  58.                                 }
  59.                         }

  60.                 }

  61.         }

  62.         /**
  63.          * 在遍历之后,将满足条件的file存储到临时容器中
  64.          *
  65.          * @param dir
  66.          * @param filter
  67.          * @param list
  68.          */
  69.         private static void listAllFiles(File dir, FileFilter filter,
  70.                         List<File> list) {
  71.                 // TODO Auto-generated method stub
  72.                 // 对指定的目录进行遍历
  73.                 File[] files = dir.listFiles();
  74.                 for (File file : files) {
  75.                         // 如果是目录,进行递归
  76.                         if (file.isDirectory()) {
  77.                                 listAllFiles(dir, filter, list);
  78.                         } else {
  79.                                 // 如果是文件,就将文件传递给过滤器进行过滤
  80.                                 if (filter.accept(file)) {
  81.                                         list.add(file);
  82.                                 }
  83.                         }
  84.                 }
  85.         }
  86. }
复制代码

复制代码


作者: 霍振鹏    时间: 2014-4-25 11:43
霍振鹏 发表于 2014-4-25 11:25
好吧  我无知了!

给你点建议吧,既然想让大家帮忙找问题 ,就把完整的源码放出来,





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2