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(); } } } }
相关推荐
Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...
javax.imageio.stream Java Image I/O API 的一个包,用来处理从文件和流中产生的低级别 I/O。 javax.management 提供 Java Management Extensions 的核心类。 javax.management.loading 提供实现高级动态加载的类...
Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...
Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...
Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...
Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...
Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...
javax.imageio.stream Java Image I/O API 的一个包,用来处理从文件和流中产生的低级别 I/O。 javax.management 提供 Java Management Extensions 的核心类。 javax.management.loading 提供实现高级动态加载的类。...
1.功能:该API为适用于Java平台下,通过后端程序代码调用API...lib文件夹下包含了用于在java程序中的Spire.Pdf.jar文件,在项目程序中调用接口方法时,需要导入该jar文件;doc文件下包含了所有类及方法的说明解释等。
javax.imageio.stream Java Image I/O API 的一个包,用来处理从文件和流中产生的低级别 I/O。 javax.management 提供 Java Management Extensions 的核心类。 javax.management.loading 提供实现高级动态加载的类...
Java统计代码文本文件的字符行数,程序名称:java代码行数统计软件. * 功能:统计代码的行数 * 说明:支持 整个工程的代码行数统计 共有 21 个类 忽略注释忽略空行共 1224 行 包括注释忽略空行共 1370 行 ...
28个目标文件 内容索引:JAVA源码,媒体网络,飞鸽传书 Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程...
10、支持Java文件 .java 的统计。 11、支持SQL文件 .sql 的统计。 12、支持 *.* 文件类型的自动分析统计。 13、支持自定义一次选择多个目录的统计方式。 14、支持用户自定义文件统计类型及统计方法。 15、支持htm,...
可用于对VC++、C++ Builder、Delphi、VB、C/C++、ASM、Java、C#、SQL 等程序源码进行详细的统计,可以准确的分析出程序中代码行、注释行和空白行的行数。程序会自动根据你选择的文件类型选择相应的统计方式,并将...
javax.imageio.stream Java Image I/O API 的一个包,用来处理从文件和流中产生的低级别 I/O。 javax.management 提供 Java Management Extensions 的核心类。 javax.management.loading 提供实现高级动态加载的类...
在文档注释中可以用 @author 表示程序的作者,@version 表示程序的版本,前两个注释符号要写在类定义之前,用于方法的注释@param 对参数进行注释,@return 对返回值进行注释 @throws对抛出异常的注释。 10、...
28个目标文件 内容索引:JAVA源码,媒体网络,飞鸽传书 Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程...
Java实现局域网内两点文件传输,接收端收到doc,docx,pdf类型的文件后自动调用虚拟打印机接口,实现打印pdf文件的功能。其中包括实现的原理,以及操作实现的源代码、实现的步骤、每一实现步骤对应的讲解,包括代码...