分享下java 讀取目錄及子目錄下指定文件名的路徑 并放到一個(gè)List數(shù)組里面返回遍歷和寫到文件里。
由于公司要求讀取項(xiàng)目下所有jsp文件,并讀取開頭的自定義的注釋來生成類似javadoc的東西進(jìn)行頁面管理。
而讀取jsp源代碼需要知道文件的絕對(duì)路徑,所有通過項(xiàng)目文件夾路徑先取出所有jsp文件目錄再循環(huán)解析。
最后通過搜索和自己的努力寫成一個(gè)完整的測試類,供以后查閱,同時(shí)分享一下。
ps:通過這個(gè)測試類,復(fù)習(xí)了下數(shù)組List Iterator io 泛型和遞歸函數(shù),雖然很簡單但綜合起來用還是遇到了些小問題化了一個(gè)多小時(shí)調(diào)試,例如有些異常文件沒有后綴名的用.去判斷返回的索引就是-1了,如果沒有判斷后面的操作就出現(xiàn)異常了,因此我在關(guān)鍵地方加了注釋,希望對(duì)大家有幫助。
import java.io.*;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* 讀取目錄及子目錄下指定文件名的路徑 并放到一個(gè)數(shù)組里面返回遍歷
* @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("沒有符號(hào)要求的文件");
}
else
{
String message = "";
message += "符號(hào)要求的文件數(shù):" + 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)
{
//是目錄,同時(shí)需要遍歷子目錄
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(".");//最后一個(gè).(即后綴名前面的.)的索引
String tempsuffix = "";
if(begIndex != -1)//防止是文件但卻沒有后綴名結(jié)束的文件
{
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
{
//打開一個(gè)寫文件器,構(gòu)造函數(shù)中的第二個(gè)參數(shù)true表示以追加形式寫文件
FileWriter writer = new FileWriter(fileName, true);
writer.write(content + "\r\n");
writer.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}