经常看到论坛里有人问到怎么去看文件夹下面有多少个文件和文件夹的问题,我想这个应该不难实现,有两种办法,一种是递归实现,一种是常规的循环实现。请先看递归实现的代码:
- importjava.io.*;
- importjava.util.*;
- publicclassListFileRecursion{
- publicstaticvoidlistFile(StringfilePath){
- Filefile=newFile(filePath);
- if(file.exists()){
- if(file.isDirectory()){
- System.out.print("Folder:"+file.toString());
- File[]fileArray=file.listFiles();
- System.out.println("includes"+fileArray.length+"files/foldersdirectly.");
- for(FilesubFile:fileArray){
- listFile(subFile.toString());
- }
- }
- else{
- System.out.println(file.toString());
- }
- }
- else{
- System.err.print("Thefile/folderdoesn'texist!");
- }
- }
- publicstaticvoidmain(Stringargs[]){
- listFile("C:\\VM_Image");
- }
- }
打印的结果是:
- Folder:C:\VM_Imageincludes3files/foldersdirectly.
- C:\VM_Image\Desktop.ini
- Folder:C:\VM_Image\UbuntuLinuxincludes11files/foldersdirectly.
- C:\VM_Image\UbuntuLinux\Desktop.ini
- C:\VM_Image\UbuntuLinux\Ubuntu(2).vmdk
- C:\VM_Image\UbuntuLinux\Ubuntu.nvram
- C:\VM_Image\UbuntuLinux\Ubuntu.vmdk
- C:\VM_Image\UbuntuLinux\Ubuntu.vmsd
- C:\VM_Image\UbuntuLinux\Ubuntu.vmx
- C:\VM_Image\UbuntuLinux\Ubuntu.vmxf
- C:\VM_Image\UbuntuLinux\vmware-0.log
- C:\VM_Image\UbuntuLinux\vmware-1.log
- C:\VM_Image\UbuntuLinux\vmware-2.log
- C:\VM_Image\UbuntuLinux\vmware.log
- Folder:C:\VM_Image\WindowsServer2003includes62files/foldersdirectly.
- C:\VM_Image\WindowsServer2003\Desktop.ini
- C:\VM_Image\WindowsServer2003\enu2k3-000001-s001.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-000001-s002.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-000001-s003.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-000001-s004.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-000001-s005.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-000001-s006.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-000001-s007.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-000001-s008.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-000001-s009.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-000001-s010.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-000001-s011.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-000001-s012.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-000001-s013.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-000001-s014.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-000001-s015.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-000001-s016.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-000001.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-000002-s001.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-000002-s002.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-000002-s003.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-000002-s004.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-000002-s005.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-000002-s006.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-000002-s007.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-000002-s008.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-000002-s009.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-000002-s010.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-000002-s011.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-000002-s012.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-000002-s013.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-000002-s014.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-000002-s015.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-000002-s016.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-000002.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-s001.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-s002.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-s003.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-s004.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-s005.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-s006.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-s007.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-s008.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-s009.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-s010.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-s011.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-s012.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-s013.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-s014.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-s015.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-s016.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3.vmdk
- C:\VM_Image\WindowsServer2003\vmware-0.log
- C:\VM_Image\WindowsServer2003\vmware-1.log
- C:\VM_Image\WindowsServer2003\vmware-2.log
- C:\VM_Image\WindowsServer2003\vmware.log
- C:\VM_Image\WindowsServer2003\WindowsServer2003EnterpriseEdition-Snapshot1.vmsn
- C:\VM_Image\WindowsServer2003\WindowsServer2003EnterpriseEdition-Snapshot2.vmsn
- C:\VM_Image\WindowsServer2003\WindowsServer2003EnterpriseEdition.nvram
- C:\VM_Image\WindowsServer2003\WindowsServer2003EnterpriseEdition.vmsd
- C:\VM_Image\WindowsServer2003\WindowsServer2003EnterpriseEdition.vmx
- C:\VM_Image\WindowsServer2003\WindowsServer2003EnterpriseEdition.vmxf
当然根据理论,任何一种递归方法都存在着非递归的实现方法,可能要花费多一点的代价:
- importjava.io.*;
- importjava.util.*;
- publicclassListFileCommon{
- publicstaticvoidlistFiles(StringfilePath){
- LinkedList<File>list=newLinkedList<File>();
- Filefile=newFile(filePath);
- if(file.exists()){
- if(file.isDirectory()){
- File[]fileArray=file.listFiles();
- System.out.println("Folder:"+file.toString());
- for(inti=0;i<fileArray.length;i++){
- if(fileArray[i].isDirectory())
- list.add(fileArray[i]);
- else
- System.out.println(fileArray[i].toString());
- }
- while(!list.isEmpty()){
- FilefileInList=list.removeFirst();
- if(fileInList.isDirectory()){
- //System.out.println(fileInList.toString());
- fileArray=fileInList.listFiles();
- if(fileArray==null)
- return;
- for(inti=0;i<fileArray.length;i++){
- if(fileArray[i].isDirectory())
- list.add(fileArray[i]);
- else
- System.out.println(fileArray[i].toString());
- }
- }
- }
- }
- else
- System.out.println(file.toString());
- }
- else
- System.err.println("TheFile/Folderdoesn'texist!");
- }
- publicstaticvoidmain(Stringargs[]){
- listFiles("C:\\VM_Image");
- }
- }
结果为:
- Folder:C:\VM_Image
- C:\VM_Image\Desktop.ini
- C:\VM_Image\UbuntuLinux\Desktop.ini
- C:\VM_Image\UbuntuLinux\Ubuntu(2).vmdk
- C:\VM_Image\UbuntuLinux\Ubuntu.nvram
- C:\VM_Image\UbuntuLinux\Ubuntu.vmdk
- C:\VM_Image\UbuntuLinux\Ubuntu.vmsd
- C:\VM_Image\UbuntuLinux\Ubuntu.vmx
- C:\VM_Image\UbuntuLinux\Ubuntu.vmxf
- C:\VM_Image\UbuntuLinux\vmware-0.log
- C:\VM_Image\UbuntuLinux\vmware-1.log
- C:\VM_Image\UbuntuLinux\vmware-2.log
- C:\VM_Image\UbuntuLinux\vmware.log
- C:\VM_Image\WindowsServer2003\Desktop.ini
- C:\VM_Image\WindowsServer2003\enu2k3-000001-s001.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-000001-s002.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-000001-s003.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-000001-s004.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-000001-s005.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-000001-s006.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-000001-s007.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-000001-s008.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-000001-s009.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-000001-s010.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-000001-s011.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-000001-s012.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-000001-s013.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-000001-s014.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-000001-s015.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-000001-s016.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-000001.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-000002-s001.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-000002-s002.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-000002-s003.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-000002-s004.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-000002-s005.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-000002-s006.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-000002-s007.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-000002-s008.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-000002-s009.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-000002-s010.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-000002-s011.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-000002-s012.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-000002-s013.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-000002-s014.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-000002-s015.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-000002-s016.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-000002.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-s001.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-s002.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-s003.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-s004.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-s005.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-s006.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-s007.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-s008.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-s009.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-s010.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-s011.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-s012.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-s013.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-s014.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-s015.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3-s016.vmdk
- C:\VM_Image\WindowsServer2003\enu2k3.vmdk
- C:\VM_Image\WindowsServer2003\vmware-0.log
- C:\VM_Image\WindowsServer2003\vmware-1.log
- C:\VM_Image\WindowsServer2003\vmware-2.log
- C:\VM_Image\WindowsServer2003\vmware.log
- C:\VM_Image\WindowsServer2003\WindowsServer2003EnterpriseEdition-Snapshot1.vmsn
- C:\VM_Image\WindowsServer2003\WindowsServer2003EnterpriseEdition-Snapshot2.vmsn
- C:\VM_Image\WindowsServer2003\WindowsServer2003EnterpriseEdition.nvram
- C:\VM_Image\WindowsServer2003\WindowsServer2003EnterpriseEdition.vmsd
- C:\VM_Image\WindowsServer2003\WindowsServer2003EnterpriseEdition.vmx
- C:\VM_Image\WindowsServer2003\WindowsServer2003EnterpriseEdition.vmxf