分享下java 读取目录及子目录下指定文件名的路径 并放到一个List数组里面返回遍历和写到文件里

时间:2021-12-03 12:40:13
分享下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 huangmayi
*
*/
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();
    }
}
}