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(); } } } }
相关推荐
- `javax.swing.*`: 提供了Swing框架中的所有组件。 - `javax.swing.undo.*`: 用于实现撤销功能。 - `javax.swing.text.*`: 文本处理相关的类。 - `javax.swing.event.*`: 事件监听相关的类。 - `java.awt.*`: AWT中...
本文将详细介绍如何使用Java及Apache POI库来读取Excel文件中的数据,并提供一段示例代码及其注释解析。 #### 二、准备工作 在开始编写代码之前,我们需要做一些准备工作: 1. **下载并导入POI包**:Apache POI是一...
在Java编程中,Properties文件是用于存储配置信息的文本文件,通常包含键值对,其中键和值可以是任意字符串。然而,当这些文件中包含中文字符时,如果不正确地处理编码,可能会出现中文乱码的问题。本文将深入探讨...
在实际应用中,你可以将这个程序扩展为一个批处理工具,接受一个目录作为参数,遍历该目录及其子目录下的所有Java文件进行统计。 为了提高效率和准确性,你还可以考虑优化正则表达式,或者使用Java的`JavaCC`或`...
总的来说,这个Shell脚本通过解析文件类型并应用相应的`sed`命令,实现了自动去除源代码文件中注释的功能。这对于版本控制、代码分析或者仅仅是为了查看不包含注释的代码逻辑都十分有用。然而,需要注意的是,这种...
例如,在`HelloWorld.java`文件中,我们可能会看到如下的文档注释: ```java /** * HelloWorld类用于演示Java程序的基本输出。 * * @author YourName * @version 1.0 */ public class HelloWorld { /** * ...
在Java编程语言中,文件操作是一项基础且重要的任务,涵盖了读取、写入、复制、移动和删除等操作。在这个程序中,我们关注的是如何使用Java的IO流(Input/Output Stream)来读取多个TXT文件的内容,并将其合并到一个...
下面我们将深入探讨这个“万能打印模块java源码”中可能涉及的关键知识点。 首先,我们要理解Java编程的基础。Java是一种面向对象的编程语言,具有跨平台性、安全性以及丰富的库支持等特点。在Java中,一个模块通常...
javax.imageio.stream Java Image I/O API 的一个包,用来处理从文件和流中产生的低级别 I/O。 javax.management 提供 Java Management Extensions 的核心类。 javax.management.loading 提供实现高级动态加载的类...
在Java ATM项目中,注释应该清晰地解释代码的功能、目的以及如何使用各个类和方法。 7. **帮助文档**:帮助文档可能包含使用ATM模拟器的步骤、常见问题解答以及如何进行扩展或调试的指南。这对于其他开发者理解并...
Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...
通过分析`counter.java`文件,我们可以逐步学习和理解以上知识点,从而掌握Java编程的基础,并了解如何构建一个简单的应用程序。对于初学者来说,这是一个很好的实践项目,可以提升对编程逻辑和面向对象编程的理解。
在Java编程中,读取配置文件是常见的任务,主要用于存储应用程序的设置或环境变量,以方便管理和维护。Java提供了一个内置的`java.util.Properties`类,用于处理`.properties`文件,这种格式通常用来存储键值对,即...
在Java编程语言中,开发一个工资打印程序涉及到多个核心知识点,包括对象导向设计、数据处理、文件操作以及可能的数据库交互。以下是对这些关键概念的详细解释: 1. **对象导向设计**:Java是一种面向对象的语言,...
这些信息通常在源代码的注释或配置文件中给出。 总的来说,这个压缩包提供了一个完整的解决方案,可以帮助开发者快速理解和实现Java中导出包含数据和图片的Excel文件功能。通过学习和理解这个示例,你可以进一步...
对于`test.java`文件,如果它是一个Java源代码文件,我们还可以分析它的结构,例如统计注释行、空行和代码行。这需要更复杂的逻辑,可能涉及到正则表达式来匹配不同的行类型。 此外,如果需要统计大量文件的行数,...
根据给定文件的信息,我们可以总结出以下几个相关的Java基础知识点: ### 1. 判断质数 (IsPrime) 在代码示例1中,我们看到一个简单的程序用于找出2到100之间的所有质数。该程序使用了两层循环来实现这一功能。 - ...
总的来说,这些文件提供了链表数据结构在Java中的基本实现。通过阅读和理解这些源代码,初学者可以更好地掌握链表的工作原理,以及如何在实际编程中应用链表。同时,这也能帮助他们提升解决问题和设计数据结构的能力...
在Java中,注释分为单行注释(//)和多行注释(/*...*/)。因此,代码统计程序需要能够识别这两种类型的注释并排除它们,同时,空行(仅包含空格和制表符)也需要被正确处理。 1. **代码解析**:实现这个功能的第一...
综上所述,蓝宇快递打印系统是一个综合性的Java项目,它涵盖了编程基础、UI设计、数据库操作、文件处理、异常处理等多个方面,是学习和提升Java编程技能的好材料。通过研究和实践这个项目,开发者可以深入理解Java...