打印java文件中的所有注释

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.xpup.bear.code.EnumDescription;
import org.xpup.bear.code.gb.RadiationSickness;

/**
 * :打印java文件中的所有注释
 */
public class PrintComments {
	
	 public static final String filepath="E:/workspace/bear-code/src/org/xpup/bear/code/ws/";
	 
	 public static void main(String[] args) throws FileNotFoundException {
		   List<String> list=new ArrayList<String>();
		   
		   File file = new File(filepath);
	       String [] fileName = file.list();
	       int i=0;
	       for (String name : fileName) {
	    	   list.add(readFile(filepath, name));
	    	   i++;
	       }
		 
//	       list.add(readFile(filepath, "BornDefectType.java"));
	       write2TxtFile(list);
	       System.out.println("已经写入文件的JAVA类个数:"+i);
	 }
	 
	 
	 /*
	  * 获取JAVA类文件中的类注释
	  * @ filePath 文件路径
	  * @ fileName 文件名称
	  * @ return   注释内容
	  */
	 public static String readFile(String filePath,String fileName) {
		 String rtn="";
		 try {
	            FileReader freader = new FileReader(filePath+fileName);
	            BufferedReader breader = new BufferedReader(freader);
	            StringBuilder sb = new StringBuilder();
	            try {
	                String temp = "";
	                /**
	                 * 读取文件内容,并将读取的每一行后都不加\n
	                 * 其目的是为了在解析双反斜杠(//)注释时做注释中止符
	                 */
	                while((temp=breader.readLine())!= null)
	                {
	                    sb.append(temp);
	                    sb.append('\n');
	                }
	                String src = sb.toString();
	                /**
	                 * 1、做/* 注释的正则匹配
	                 *

	                 * 通过渐进法做注释的正则匹配,因为/*注释总是成对出现
	                 * 当匹配到一个/*时总会在接下来的内容中会首先匹配到"*\\/",
	                 * 因此在获取对应的"*\\/"注释时只需要从当前匹配的/*开始即可,
	                 * 下一次匹配时只需要从上一次匹配的结尾开始即可
	                 * (这样对于大文本可以节省匹配效率)——
	                 * 这就是渐进匹配法
	                 *

	                 * */
	                Pattern leftpattern = Pattern.compile("/\\*");
	                Matcher leftmatcher = leftpattern.matcher(src);
	                Pattern rightpattern = Pattern.compile("\\*/");
	                Matcher rightmatcher = rightpattern.matcher(src);
	                sb = new StringBuilder();
	                /**
	                 * begin 变量用来做渐进匹配的游标 {@value}
	                 * 初始值为文件开头
	                 * **/
	                int begin = 0;
	                while(leftmatcher.find(begin))
	                {
	                    rightmatcher.find(leftmatcher.start());
	                    sb.append(src.substring(leftmatcher.start(), rightmatcher.end()));
	                    /** 为输出时格式的美观 **/
	                    sb.append('\n');
	                    begin = rightmatcher.end();
	                }
//	                System.out.println(sb.toString());
	               rtn= getDescrpition(sb.toString(),fileName);
//	               list.add(strList);
	       		   return rtn;
	       		   
//	                /**
//	                 * 2、对//注释进行匹配(渐进匹配法)
//	                 * 匹配方法是 // 总是与 \n 成对出现
//	                 * */
//	                begin = 0;
//	                Pattern leftpattern1 = Pattern.compile("//");
//	                Matcher leftmatcher1 = leftpattern1.matcher(src);
//	                Pattern rightpattern1 = Pattern.compile("\n");
//	                Matcher rightmatcher1 = rightpattern1.matcher(src);
//	                sb = new StringBuilder();
//	                while(leftmatcher1.find(begin))
//	                {
//	                    rightmatcher1.find(leftmatcher1.start());
//	                    sb.append(src.substring(leftmatcher1.start(), rightmatcher1.end()));
//	                    begin = rightmatcher1.end();
//	                }
//	                System.out.println(sb.toString());
	            } catch (IOException e) {
	                System.out.println("文件读取失败");
	            }finally
	            {
	                breader.close();
	                freader.close();
	            }
	        } catch (FileNotFoundException e) {
	            System.out.println("文件不存在");
	        }catch(IOException e)
	        {
	            System.out.println("文件读取失败");
	        }
		return rtn;
	}
	 
	 
	 /**
	  * 获取相关信息
	  * @param strTxt
	  */
	 public static String getDescrpition(String strTxt,String fileName) {
		
//		List<String> list=new ArrayList<String>();
		String rtn="";
		String preStr=strTxt.substring(strTxt.indexOf("<pre>")+5, strTxt.indexOf("</pre>")-2);
//		System.out.println(preStr);
		
		String temp=preStr.substring(preStr.indexOf("标准依据:")+5, preStr.indexOf("* 发布单位:"));
//		System.out.println("temp:"+temp);
		
		//名称
		String name=temp.substring(temp.lastIndexOf(".")+4, temp.length());
//		System.out.println("名称:"+name);
		
		//标准依据
		String code=temp.substring(temp.indexOf("WS"), temp.lastIndexOf(".")+4);
//		System.out.println("标准依据:"+code);
		
		//发布单位
		String maker=preStr.substring(preStr.indexOf("发布单位:")+5, preStr.indexOf("* 发布时间:"));
//		System.out.println("发布单位:"+maker);
		
		//发布时间
		String releaseTime=preStr.substring(preStr.indexOf("发布时间:")+5, preStr.length());
//		System.out.println("发布时间:"+releaseTime);
		
		String className=fileName.substring(0, fileName.indexOf(".java"));
		
		String effectiveTime="2012-02-01";
		
		
		rtn= "list.add(new EnumDescription('"+name.trim()+"', '"+code.trim()+"', '"+maker.trim()+"', '"+releaseTime.trim()+"', '"+effectiveTime.trim()+"', "+"\r\n"+"		"+className.trim()+".class.getName()));";
		System.out.println(rtn);
		return rtn;
		
		
//		list.add(new EnumDescription("放射性疾病名单代码", "GB/T 18201-2000", "中国国家质量技术监督局", "2000-09-30", "2001-03-01",
//		     RadiationSickness.class.getName()));
		
	}
	 
	 /**

     * 将拼接好的字符串写进文本

     * @param List<String> 要写入文件的字符串集合
     * 
     */   
	 public static void write2TxtFile(List<String> strList) throws FileNotFoundException {
//			String lan+="\r\n"; 
	    	File file=new File("E:\\result.txt");
	    	if (file.exists()) {
				file.delete();
			}
	    	PrintWriter writer=null;
	    	if(!file.exists()){
	    		try {
					file.createNewFile();
					 writer=new PrintWriter(file);
					 for (String str : strList) {
						 writer.write(str+"\r\n");
					   }
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}finally{
					writer.flush();
					writer.close();
				}
	    	}
	   } 
	 
	 
}

猜你喜欢

转载自taoge-tony.iteye.com/blog/2299907
今日推荐