java递归文件夹
① 在java中什么是递归有什么用
Java方法递归是指在一个方法的内部调用自身的过程,以此类推就是java方法递归的理解思想,具体来讲就是把规模大的问题转化为规模小的相似的子问题来解决。在函数实现时,因为解决大问题的方法和解决小问题的方法往往是同一个方法,所以就产生了函数调用它自身的情况。另外这个解决问题的函数必须有明显的结束条件,这样就不会产生无限递归的情况了。因此,java方法递归的两个条件就是,一通过递归调用来缩小问题规模,且新问题与原问题有着相同的形式;二存在一种简单情境,可以使递归在简单情境下退出。
② 使用java递归方法遍历指定目录下所有子目录和子文件
import java.io.*; 
import java.util.ArrayList; 
import java.util.Iterator; 
import java.util.List; 
/** 
* 读取目录及子目录下指定文件名的路径 并放到一个数组里面返回遍历 
* @author zdz8207 
* 
*/ 
public class FileViewer { 
public static void main(String[] args) { 
//List arrayList = FileViewer.getListFiles("d:/com","html",true); 
//读取d:/com下的以java 结尾的文件 如有子目录,包含之(后缀名为null则为所有文件) 
//List arrayList = FileViewer.getListFiles("d:/com","java",true); 
//经试验,后缀不能不填写,否则编译不通过,提示“FileViewer.java:17: 非法的表达式开始”。 
//另外后缀为""时的情况需要 增加到IF 里去,否则 后缀为""时,不会显示所有文件 
List arrayList = FileViewer.getListFiles("d:/com","",true); 
if(arrayList.isEmpty()) 
{ 
System.out.println("没有符号要求的文件"); 
} 
else 
{ 
String message = ""; 
message += "符号要求的文件数:" + arrayList.size() + "\r\n"; 
System.out.println(message); 
for (Iterator i = arrayList.iterator(); i.hasNext();) 
{ 
String temp = (String) i.next(); 
System.out.println(temp); 
message += temp + "\r\n"; 
} 
//将显示的文件路径写到指定的文件里,若文件不存在,则提示IO异常 
//java.io.FileNotFoundException: d:\ajax\menu.txt (系统找不到指定的路径。) 
//如果 加个文件是否存在的判断,如不存在就在当前目录新建一个,则更好。 
appendMethod("d:/menu.txt",message); 
} 
} 
public static List<String> fileList = new ArrayList<String>(); 
/** 
* 
* @param path 文件路径 
* @param suffix 后缀名 
* @param isdepth 是否遍历子目录 
* @return 
*/ 
public static List getListFiles(String path, String suffix, boolean isdepth) 
{ 
File file = new File(path); 
return FileViewer.listFile(file ,suffix, isdepth); 
} 
public static List listFile(File f, String suffix, boolean isdepth) 
{ 
//是目录,同时需要遍历子目录 
if (f.isDirectory() && isdepth == true) 
{ 
File[] t = f.listFiles(); 
for (int i = 0; i < t.length; i++) 
{ 
listFile(t[i], suffix, isdepth); 
} 
} 
else 
{ 
String filePath = f.getAbsolutePath(); 
System.out.println("suffix = "+suffix); 
if(suffix =="" || suffix == null) 
{ 
//后缀名为null则为所有文件 
System.out.println("----------------"); 
fileList.add(filePath); 
} 
else 
{ 
int begIndex = filePath.lastIndexOf(".");//最后一个.(即后缀名前面的.)的索引 
String tempsuffix = ""; 
if(begIndex != -1)//防止是文件但却没有后缀名结束的文件 
{ 
tempsuffix = filePath.substring(begIndex + 1, filePath.length()); 
} 
if(tempsuffix.equals(suffix)) 
{ 
fileList.add(filePath); 
} 
System.out.println("|||||||||||||||||||"); 
} 
} 
return fileList; 
} 
/** 
* 方法追加文件:使用FileWriter 
* @param fileName 
* @param content 
*/ 
public static void appendMethod(String fileName, String content) 
{ 
try 
{ 
//打开一个写文件器,构造函数中的第二个参数true表示以追加形式写文件 
FileWriter writer = new FileWriter(fileName, true); 
writer.write(content + "\r\n"); 
writer.close(); 
} 
catch (IOException e) 
{ 
e.printStackTrace(); 
} 
} 
}
