用java实现本地文件的遍历,顺便了解了下集合框架,注意java中还有Collections,是一个强大的工具,注意其与Collection的区别,在
for(File f: listFiles) 中,如果不做 if(listFiles != null) 判断,在遍历到listFiles为空时,会报NullPointerException的异常,熟悉下常见的NullPointerException异常。
1 /* 2 *遍历某磁盘下的所有文件 3 */ 4 package familiarjava; 5 import java.io.*; 6 import java.util.*; 7 8 public class TraversFile { 9 10 //------------------------------方法一---------------------------------------- 11 static Collection<File> listFiles(File root){ 12 List<File> files = new ArrayList<File>(); 13 listFiles(files, root); 14 return files; 15 } 16 17 static void listFiles(List<File> files, File root) { 18 // TODO Auto-generated method stub 19 File[] listFiles = root.listFiles(); 20 if(listFiles != null){ //若不做判断,会报空指针NullPointerException异常 21 for(File f: listFiles){ 22 if(f.isFile()) 23 files.add(f); 24 else if(f.isDirectory()) 25 listFiles(files, f); 26 } 27 } 28 29 } 30 31 void printCollection(Collection<File> files){ 32 if(files.isEmpty()) 33 return; 34 Iterator<File> it = files.iterator(); 35 while(it.hasNext()) 36 System.out.println(it.next()); 37 } 38 39 //-------------------------------方法二--------------------------------------- 40 public void traversefile(String dir, String filetype){ 41 File f = new File(dir); 42 File[] fs = f.listFiles(); 43 44 if(fs != null){ 45 for(int i=0; i<fs.length; i++){ 46 File file = fs[i]; 47 if(file.isFile()){ 48 String pathTemp = file.getAbsolutePath(); 49 if((pathTemp.indexOf(filetype))!=-1) 50 System.out.println(file.getAbsolutePath()); 51 }else{ 52 traversefile(file.getAbsolutePath(),filetype); 53 //System.out.println(file.getAbsolutePath()); 54 } 55 } 56 } 57 } 58 59 public static void main(String[] args){ 60 TraversFile tf = new TraversFile(); 61 //tf.traversefile("f:/"); 62 63 64 /* 65 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 66 System.out.println("请输入盘符: "); 67 String dirSym = null; 68 try{ 69 dirSym = br.readLine().toString(); 70 }catch(IOException e){ 71 System.out.println(e); 72 } 73 dirSym = dirSym + ":/"; 74 75 System.out.println("请输入需要显示的文件类型的后缀名: "); 76 String fileType = null; 77 try{ 78 fileType = br.readLine(); 79 }catch(IOException e){ 80 System.out.println(e); 81 } 82 fileType = "." + fileType; 83 tf.traversefile(dirSym, fileType); 84 */ 85 86 File temp = new File("D:\\iso"); 87 Collection<File> files = listFiles(temp); 88 tf.printCollection(files); 89 } 90 }
原文:http://www.cnblogs.com/stevengerrard/p/4109287.html