A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 波涛 于 2014-5-21 21:00 编辑

《java基础视频教程第20天-10-IO流-(创建java文件列表)》
下面是视频中毕老师敲的代码,实现了指定目录下对指定后缀名的文件进行扫描,并将扫描后每个文件具体路径写入fileList.txt中;问题是如果我们扫描
的目录中含有系统隐藏文件(比如System Volume Information)这样的文件夹,则用listFiles()方法访问时会出错,这个地方需要判断是否
为空。
视频源代码:

  1. import java.io.*;
  2. import java.util.*;
  3. class JavaFileList
  4. {
  5.           public static void main(String[] args) throws IOException
  6.           {
  7.                   File dir = new File("D:\\java1223");
  8.                   List<File> list = new ArrayList<File>();
  9.                   fileToList(dir,list);
  10.                   
  11.                   System.out.println(list.size());
  12.                   
  13.                   File file = new File(dir,"javalist.txt");
  14.                   writeToFile(list,file.toString());
  15.           }
  16.          
  17.           public static void fileToList(File dir,List<File> list)
  18.           {
  19.                    File[] files = dir.listFiles();
  20.                   
  21.                    for(File file : files)
  22.                    {
  23.                             if(file.isDirectory())
  24.                                fileToList(file,list);
  25.                             else
  26.                             {
  27.                                       if(file.getName().endsWith(".java"))
  28.                                          list.add(file);
  29.                             }
  30.                    }
  31.                  }
  32.           public static void writeToFile(List<File> list, String javaListFile) throws IOException
  33.           {
  34.                    BufferedWriter bufw = null;
  35.                    try
  36.                    {
  37.                             bufw = new BufferedWriter(new FileWriter(javaListFile));
  38.                             for(File f : list)
  39.                             {
  40.                                       String path = f.getAbsolutePath();
  41.                                       bufw.write(path);
  42.                                       bufw.newLine();
  43.                                       bufw.flush();
  44.                             }
  45.                            
  46.                    }
  47.                    catch (IOException e)
  48.                    {
  49.                              throw e;
  50.                    }
  51.                    finally
  52.                    {
  53.                              try
  54.                              {
  55.                                        if(bufw != null)
  56.                                          bufw.close();
  57.                              }
  58.                              catch (IOException e)
  59.                              {
  60.                                        throw e;
  61.                              }
  62.                   }
  63.          }
  64. }
复制代码


以上代码在某些情况下是有问题的,如果D:\\java1223含有系统文件(比如System Volume Information或其他不能访问的文件夹),第19行的数组将会得到一个空值,抛出空指针异常;我们需要在第二十行加入一句if(files != null) 。不知道大家意下如何,修改后:
  1. import java.io.*;
  2. import java.util.*;
  3. class JavaFileList
  4. {
  5.           public static void main(String[] args) throws IOException
  6.           {
  7.                   File dir = new File("g:\\");
  8.                   List<File> list = new ArrayList<File>();
  9.                   fileToList(dir,list);
  10.                   
  11.                   System.out.println(list.size());
  12.                   
  13.                   File file = new File(dir,"javalist.txt");
  14.                   writeToFile(list,file.toString());
  15.           }
  16.          
  17.           public static void fileToList(File dir,List<File> list)
  18.           {
  19.                    File[] files = dir.listFiles();
  20.                    if(files != null)
  21.                    for(File file : files)
  22.                    {
  23.                             if(file.isDirectory())
  24.                                fileToList(file,list);
  25.                             else
  26.                             {
  27.                                       if(file.getName().endsWith(".mp3"))
  28.                                          list.add(file);
  29.                             }
  30.                    }
  31.                  }
  32.           public static void writeToFile(List<File> list, String javaListFile) throws IOException
  33.           {
  34.                    BufferedWriter bufw = null;
  35.                    try
  36.                    {
  37.                             bufw = new BufferedWriter(new FileWriter(javaListFile));
  38.                             for(File f : list)
  39.                             {
  40.                                       String path = f.getAbsolutePath();
  41.                                       bufw.write(path);
  42.                                       bufw.newLine();
  43.                                       bufw.flush();
  44.                             }
  45.                            
  46.                    }
  47.                    catch (IOException e)
  48.                    {
  49.                              throw e;
  50.                    }
  51.                    finally
  52.                    {
  53.                              try
  54.                              {
  55.                                        if(bufw != null)
  56.                                          bufw.close();
  57.                              }
  58.                              catch (IOException e)
  59.                              {
  60.                                        throw e;
  61.                              }
  62.                   }
  63.          }
  64. }
复制代码

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马