http://chengyoyo2006.blog.163.com/blog/static/84517348200893095043496/
java 读取目录及子目录下指定文件名的路径 并放到一个List数组里面返回遍历和写到文件里
JAVA技术 2008-10-30 21:50:43 阅读16 评论0 字号:大中小 订阅
分享下java 读取目录及子目录下指定文件名的路径 并放到一个List数组里面返回遍历和写到文件里。由于公司要求读取项目下所有jsp文件,并读取开头的自定义的注释来生成类似javadoc的东西进行页面管理。而读取jsp源代码需要知道文件的绝对路径,所有通过项目文件夹路径先取出所有jsp文件目录再循环解析。最后通过搜索和自己的努力写成一个完整的测试类,供以后查阅,同时分享一下。 ps:通过这个测试类,复习了下数组List Iterator io 泛型和递归函数,虽然很简单但综合起来用还是遇到了些小问题化了一个多小时调试,例如有些异常文件没有后缀名的用.去判断返回的索引就是-1了,如果没有判断后面的操作就出现异常了,因此我在关键地方加了注释,希望对大家有帮助。
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:/ajax","html",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"; } appendMethod("d:/ajax/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(); if(suffix !=null) { int begIndex = filePath.lastIndexOf(".");//最后一个.(即后缀名前面的.)的索引 String tempsuffix = ""; if(begIndex != -1)//防止是文件但却没有后缀名结束的文件 { tempsuffix = filePath.substring(begIndex + 1, filePath.length()); } if(tempsuffix.equals(suffix)) { fileList.add(filePath); } } else { //后缀名为null则为所有文件 fileList.add(filePath); } } 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(); }} }