遍历文件夹内的所有文件的小程序

经常看到论坛里有人问到怎么去看文件夹下面有多少个文件和文件夹的问题,我想这个应该不难实现,有两种办法,一种是递归实现,一种是常规的循环实现。请先看递归实现的代码:

  1. import java.io.*;
  2. import java.util.*;
  3. public class ListFileRecursion{
  4.     
  5.     public static void listFile(String filePath){
  6.         File file = new File(filePath);
  7.         
  8.         if(file.exists()){
  9.             if(file.isDirectory()){
  10.                 System.out.print("Folder: "+ file.toString());
  11.                 
  12.                 File[] fileArray = file.listFiles();
  13.                 
  14.                 System.out.println(" includes "+ fileArray.length +" files/folders directly.");
  15.                 
  16.                 for(File subFile : fileArray){
  17.                     listFile(subFile.toString());
  18.                 }
  19.             }
  20.             else{
  21.                 System.out.println(file.toString());
  22.             }
  23.         }
  24.         else{
  25.             System.err.print("The file/folder doesn't exist!");
  26.         }
  27.     }
  28.     
  29.     public static void main(String args[]){
  30.         listFile("C://VM_Image");
  31.     }
  32. }

打印的结果是:

  1. Folder: C:/VM_Image includes 3 files/folders directly.
  2. C:/VM_Image/Desktop.ini
  3. Folder: C:/VM_Image/Ubuntu Linux includes 11 files/folders directly.
  4. C:/VM_Image/Ubuntu Linux/Desktop.ini
  5. C:/VM_Image/Ubuntu Linux/Ubuntu (2).vmdk
  6. C:/VM_Image/Ubuntu Linux/Ubuntu.nvram
  7. C:/VM_Image/Ubuntu Linux/Ubuntu.vmdk
  8. C:/VM_Image/Ubuntu Linux/Ubuntu.vmsd
  9. C:/VM_Image/Ubuntu Linux/Ubuntu.vmx
  10. C:/VM_Image/Ubuntu Linux/Ubuntu.vmxf
  11. C:/VM_Image/Ubuntu Linux/vmware-0.log
  12. C:/VM_Image/Ubuntu Linux/vmware-1.log
  13. C:/VM_Image/Ubuntu Linux/vmware-2.log
  14. C:/VM_Image/Ubuntu Linux/vmware.log
  15. Folder: C:/VM_Image/Windows Server 2003 includes 62 files/folders directly.
  16. C:/VM_Image/Windows Server 2003/Desktop.ini
  17. C:/VM_Image/Windows Server 2003/enu2k3-000001-s001.vmdk
  18. C:/VM_Image/Windows Server 2003/enu2k3-000001-s002.vmdk
  19. C:/VM_Image/Windows Server 2003/enu2k3-000001-s003.vmdk
  20. C:/VM_Image/Windows Server 2003/enu2k3-000001-s004.vmdk
  21. C:/VM_Image/Windows Server 2003/enu2k3-000001-s005.vmdk
  22. C:/VM_Image/Windows Server 2003/enu2k3-000001-s006.vmdk
  23. C:/VM_Image/Windows Server 2003/enu2k3-000001-s007.vmdk
  24. C:/VM_Image/Windows Server 2003/enu2k3-000001-s008.vmdk
  25. C:/VM_Image/Windows Server 2003/enu2k3-000001-s009.vmdk
  26. C:/VM_Image/Windows Server 2003/enu2k3-000001-s010.vmdk
  27. C:/VM_Image/Windows Server 2003/enu2k3-000001-s011.vmdk
  28. C:/VM_Image/Windows Server 2003/enu2k3-000001-s012.vmdk
  29. C:/VM_Image/Windows Server 2003/enu2k3-000001-s013.vmdk
  30. C:/VM_Image/Windows Server 2003/enu2k3-000001-s014.vmdk
  31. C:/VM_Image/Windows Server 2003/enu2k3-000001-s015.vmdk
  32. C:/VM_Image/Windows Server 2003/enu2k3-000001-s016.vmdk
  33. C:/VM_Image/Windows Server 2003/enu2k3-000001.vmdk
  34. C:/VM_Image/Windows Server 2003/enu2k3-000002-s001.vmdk
  35. C:/VM_Image/Windows Server 2003/enu2k3-000002-s002.vmdk
  36. C:/VM_Image/Windows Server 2003/enu2k3-000002-s003.vmdk
  37. C:/VM_Image/Windows Server 2003/enu2k3-000002-s004.vmdk
  38. C:/VM_Image/Windows Server 2003/enu2k3-000002-s005.vmdk
  39. C:/VM_Image/Windows Server 2003/enu2k3-000002-s006.vmdk
  40. C:/VM_Image/Windows Server 2003/enu2k3-000002-s007.vmdk
  41. C:/VM_Image/Windows Server 2003/enu2k3-000002-s008.vmdk
  42. C:/VM_Image/Windows Server 2003/enu2k3-000002-s009.vmdk
  43. C:/VM_Image/Windows Server 2003/enu2k3-000002-s010.vmdk
  44. C:/VM_Image/Windows Server 2003/enu2k3-000002-s011.vmdk
  45. C:/VM_Image/Windows Server 2003/enu2k3-000002-s012.vmdk
  46. C:/VM_Image/Windows Server 2003/enu2k3-000002-s013.vmdk
  47. C:/VM_Image/Windows Server 2003/enu2k3-000002-s014.vmdk
  48. C:/VM_Image/Windows Server 2003/enu2k3-000002-s015.vmdk
  49. C:/VM_Image/Windows Server 2003/enu2k3-000002-s016.vmdk
  50. C:/VM_Image/Windows Server 2003/enu2k3-000002.vmdk
  51. C:/VM_Image/Windows Server 2003/enu2k3-s001.vmdk
  52. C:/VM_Image/Windows Server 2003/enu2k3-s002.vmdk
  53. C:/VM_Image/Windows Server 2003/enu2k3-s003.vmdk
  54. C:/VM_Image/Windows Server 2003/enu2k3-s004.vmdk
  55. C:/VM_Image/Windows Server 2003/enu2k3-s005.vmdk
  56. C:/VM_Image/Windows Server 2003/enu2k3-s006.vmdk
  57. C:/VM_Image/Windows Server 2003/enu2k3-s007.vmdk
  58. C:/VM_Image/Windows Server 2003/enu2k3-s008.vmdk
  59. C:/VM_Image/Windows Server 2003/enu2k3-s009.vmdk
  60. C:/VM_Image/Windows Server 2003/enu2k3-s010.vmdk
  61. C:/VM_Image/Windows Server 2003/enu2k3-s011.vmdk
  62. C:/VM_Image/Windows Server 2003/enu2k3-s012.vmdk
  63. C:/VM_Image/Windows Server 2003/enu2k3-s013.vmdk
  64. C:/VM_Image/Windows Server 2003/enu2k3-s014.vmdk
  65. C:/VM_Image/Windows Server 2003/enu2k3-s015.vmdk
  66. C:/VM_Image/Windows Server 2003/enu2k3-s016.vmdk
  67. C:/VM_Image/Windows Server 2003/enu2k3.vmdk
  68. C:/VM_Image/Windows Server 2003/vmware-0.log
  69. C:/VM_Image/Windows Server 2003/vmware-1.log
  70. C:/VM_Image/Windows Server 2003/vmware-2.log
  71. C:/VM_Image/Windows Server 2003/vmware.log
  72. C:/VM_Image/Windows Server 2003/Windows Server 2003 Enterprise Edition-Snapshot1.vmsn
  73. C:/VM_Image/Windows Server 2003/Windows Server 2003 Enterprise Edition-Snapshot2.vmsn
  74. C:/VM_Image/Windows Server 2003/Windows Server 2003 Enterprise Edition.nvram
  75. C:/VM_Image/Windows Server 2003/Windows Server 2003 Enterprise Edition.vmsd
  76. C:/VM_Image/Windows Server 2003/Windows Server 2003 Enterprise Edition.vmx
  77. C:/VM_Image/Windows Server 2003/Windows Server 2003 Enterprise Edition.vmxf

当然根据理论,任何一种递归方法都存在着非递归的实现方法,可能要花费多一点的代价:

  1. import java.io.*;
  2. import java.util.*;
  3. public class ListFileCommon {
  4.     public static void listFiles(String filePath){
  5.         LinkedList<File> list = new LinkedList<File>();
  6.         File file = new File(filePath);
  7.         
  8.         if (file.exists()){
  9.             if(file.isDirectory()){
  10.                 File[] fileArray = file.listFiles();
  11.                 
  12.                 System.out.println("Folder: "+ file.toString());
  13.                 
  14.                 for(int i=0; i<fileArray.length; i++){
  15.                     if (fileArray[i].isDirectory())
  16.                         list.add(fileArray[i]);
  17.                     else
  18.                         System.out.println(fileArray[i].toString());
  19.                 }
  20.                 while(! list.isEmpty()){
  21.                     File fileInList = list.removeFirst();
  22.                     
  23.                     if(fileInList.isDirectory()){
  24.                         //System.out.println(fileInList.toString());
  25.                         
  26.                         fileArray = fileInList.listFiles();
  27.                         
  28.                         if(fileArray == null)
  29.                             return;
  30.                         
  31.                         for(int i=0; i<fileArray.length; i++){
  32.                             if(fileArray[i].isDirectory())
  33.                                 list.add(fileArray[i]);
  34.                             else
  35.                                 System.out.println(fileArray[i].toString());
  36.                         }
  37.                     }
  38.                 }
  39.             }
  40.             else
  41.                 System.out.println(file.toString());
  42.         }
  43.         else
  44.             System.err.println("The File/Folder doesn't exist!");           
  45.     }
  46.     public static void main(String args[]){
  47.         listFiles("C://VM_Image");
  48.     }
  49. }

结果为:

  1. Folder: C:/VM_Image
  2. C:/VM_Image/Desktop.ini
  3. C:/VM_Image/Ubuntu Linux/Desktop.ini
  4. C:/VM_Image/Ubuntu Linux/Ubuntu (2).vmdk
  5. C:/VM_Image/Ubuntu Linux/Ubuntu.nvram
  6. C:/VM_Image/Ubuntu Linux/Ubuntu.vmdk
  7. C:/VM_Image/Ubuntu Linux/Ubuntu.vmsd
  8. C:/VM_Image/Ubuntu Linux/Ubuntu.vmx
  9. C:/VM_Image/Ubuntu Linux/Ubuntu.vmxf
  10. C:/VM_Image/Ubuntu Linux/vmware-0.log
  11. C:/VM_Image/Ubuntu Linux/vmware-1.log
  12. C:/VM_Image/Ubuntu Linux/vmware-2.log
  13. C:/VM_Image/Ubuntu Linux/vmware.log
  14. C:/VM_Image/Windows Server 2003/Desktop.ini
  15. C:/VM_Image/Windows Server 2003/enu2k3-000001-s001.vmdk
  16. C:/VM_Image/Windows Server 2003/enu2k3-000001-s002.vmdk
  17. C:/VM_Image/Windows Server 2003/enu2k3-000001-s003.vmdk
  18. C:/VM_Image/Windows Server 2003/enu2k3-000001-s004.vmdk
  19. C:/VM_Image/Windows Server 2003/enu2k3-000001-s005.vmdk
  20. C:/VM_Image/Windows Server 2003/enu2k3-000001-s006.vmdk
  21. C:/VM_Image/Windows Server 2003/enu2k3-000001-s007.vmdk
  22. C:/VM_Image/Windows Server 2003/enu2k3-000001-s008.vmdk
  23. C:/VM_Image/Windows Server 2003/enu2k3-000001-s009.vmdk
  24. C:/VM_Image/Windows Server 2003/enu2k3-000001-s010.vmdk
  25. C:/VM_Image/Windows Server 2003/enu2k3-000001-s011.vmdk
  26. C:/VM_Image/Windows Server 2003/enu2k3-000001-s012.vmdk
  27. C:/VM_Image/Windows Server 2003/enu2k3-000001-s013.vmdk
  28. C:/VM_Image/Windows Server 2003/enu2k3-000001-s014.vmdk
  29. C:/VM_Image/Windows Server 2003/enu2k3-000001-s015.vmdk
  30. C:/VM_Image/Windows Server 2003/enu2k3-000001-s016.vmdk
  31. C:/VM_Image/Windows Server 2003/enu2k3-000001.vmdk
  32. C:/VM_Image/Windows Server 2003/enu2k3-000002-s001.vmdk
  33. C:/VM_Image/Windows Server 2003/enu2k3-000002-s002.vmdk
  34. C:/VM_Image/Windows Server 2003/enu2k3-000002-s003.vmdk
  35. C:/VM_Image/Windows Server 2003/enu2k3-000002-s004.vmdk
  36. C:/VM_Image/Windows Server 2003/enu2k3-000002-s005.vmdk
  37. C:/VM_Image/Windows Server 2003/enu2k3-000002-s006.vmdk
  38. C:/VM_Image/Windows Server 2003/enu2k3-000002-s007.vmdk
  39. C:/VM_Image/Windows Server 2003/enu2k3-000002-s008.vmdk
  40. C:/VM_Image/Windows Server 2003/enu2k3-000002-s009.vmdk
  41. C:/VM_Image/Windows Server 2003/enu2k3-000002-s010.vmdk
  42. C:/VM_Image/Windows Server 2003/enu2k3-000002-s011.vmdk
  43. C:/VM_Image/Windows Server 2003/enu2k3-000002-s012.vmdk
  44. C:/VM_Image/Windows Server 2003/enu2k3-000002-s013.vmdk
  45. C:/VM_Image/Windows Server 2003/enu2k3-000002-s014.vmdk
  46. C:/VM_Image/Windows Server 2003/enu2k3-000002-s015.vmdk
  47. C:/VM_Image/Windows Server 2003/enu2k3-000002-s016.vmdk
  48. C:/VM_Image/Windows Server 2003/enu2k3-000002.vmdk
  49. C:/VM_Image/Windows Server 2003/enu2k3-s001.vmdk
  50. C:/VM_Image/Windows Server 2003/enu2k3-s002.vmdk
  51. C:/VM_Image/Windows Server 2003/enu2k3-s003.vmdk
  52. C:/VM_Image/Windows Server 2003/enu2k3-s004.vmdk
  53. C:/VM_Image/Windows Server 2003/enu2k3-s005.vmdk
  54. C:/VM_Image/Windows Server 2003/enu2k3-s006.vmdk
  55. C:/VM_Image/Windows Server 2003/enu2k3-s007.vmdk
  56. C:/VM_Image/Windows Server 2003/enu2k3-s008.vmdk
  57. C:/VM_Image/Windows Server 2003/enu2k3-s009.vmdk
  58. C:/VM_Image/Windows Server 2003/enu2k3-s010.vmdk
  59. C:/VM_Image/Windows Server 2003/enu2k3-s011.vmdk
  60. C:/VM_Image/Windows Server 2003/enu2k3-s012.vmdk
  61. C:/VM_Image/Windows Server 2003/enu2k3-s013.vmdk
  62. C:/VM_Image/Windows Server 2003/enu2k3-s014.vmdk
  63. C:/VM_Image/Windows Server 2003/enu2k3-s015.vmdk
  64. C:/VM_Image/Windows Server 2003/enu2k3-s016.vmdk
  65. C:/VM_Image/Windows Server 2003/enu2k3.vmdk
  66. C:/VM_Image/Windows Server 2003/vmware-0.log
  67. C:/VM_Image/Windows Server 2003/vmware-1.log
  68. C:/VM_Image/Windows Server 2003/vmware-2.log
  69. C:/VM_Image/Windows Server 2003/vmware.log
  70. C:/VM_Image/Windows Server 2003/Windows Server 2003 Enterprise Edition-Snapshot1.vmsn
  71. C:/VM_Image/Windows Server 2003/Windows Server 2003 Enterprise Edition-Snapshot2.vmsn
  72. C:/VM_Image/Windows Server 2003/Windows Server 2003 Enterprise Edition.nvram
  73. C:/VM_Image/Windows Server 2003/Windows Server 2003 Enterprise Edition.vmsd
  74. C:/VM_Image/Windows Server 2003/Windows Server 2003 Enterprise Edition.vmx
  75. C:/VM_Image/Windows Server 2003/Windows Server 2003 Enterprise Edition.vmxf

你可能感兴趣的:(遍历文件夹内的所有文件的小程序)