`
myCsdn_taoge
  • 浏览: 40553 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
文章分类
社区版块
存档分类
最新评论

打印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();
				}
	    	}
	   } 
	 
	 
}

 

分享到:
评论

相关推荐

    课程设计 java记事本 java代码注释

    - `javax.swing.*`: 提供了Swing框架中的所有组件。 - `javax.swing.undo.*`: 用于实现撤销功能。 - `javax.swing.text.*`: 文本处理相关的类。 - `javax.swing.event.*`: 事件监听相关的类。 - `java.awt.*`: AWT中...

    java读取excel表中数据(带注释)

    本文将详细介绍如何使用Java及Apache POI库来读取Excel文件中的数据,并提供一段示例代码及其注释解析。 #### 二、准备工作 在开始编写代码之前,我们需要做一些准备工作: 1. **下载并导入POI包**:Apache POI是一...

    JAVA 解决Properties文件保存中文乱码

    在Java编程中,Properties文件是用于存储配置信息的文本文件,通常包含键值对,其中键和值可以是任意字符串。然而,当这些文件中包含中文字符时,如果不正确地处理编码,可能会出现中文乱码的问题。本文将深入探讨...

    统计你的项目中所有java文件中有效代码量,注解量及空行数

    在实际应用中,你可以将这个程序扩展为一个批处理工具,接受一个目录作为参数,遍历该目录及其子目录下的所有Java文件进行统计。 为了提高效率和准确性,你还可以考虑优化正则表达式,或者使用Java的`JavaCC`或`...

    Linux中使用Shell脚本去掉源码注释的方法

    总的来说,这个Shell脚本通过解析文件类型并应用相应的`sed`命令,实现了自动去除源代码文件中注释的功能。这对于版本控制、代码分析或者仅仅是为了查看不包含注释的代码逻辑都十分有用。然而,需要注意的是,这种...

    Java-文档注释例子

    例如,在`HelloWorld.java`文件中,我们可能会看到如下的文档注释: ```java /** * HelloWorld类用于演示Java程序的基本输出。 * * @author YourName * @version 1.0 */ public class HelloWorld { /** * ...

    JAVA 操作文件,读写。

    在Java编程语言中,文件操作是一项基础且重要的任务,涵盖了读取、写入、复制、移动和删除等操作。在这个程序中,我们关注的是如何使用Java的IO流(Input/Output Stream)来读取多个TXT文件的内容,并将其合并到一个...

    万能打印模块java源码

    下面我们将深入探讨这个“万能打印模块java源码”中可能涉及的关键知识点。 首先,我们要理解Java编程的基础。Java是一种面向对象的编程语言,具有跨平台性、安全性以及丰富的库支持等特点。在Java中,一个模块通常...

    JAVA_API1.6文档(中文)

    javax.imageio.stream Java Image I/O API 的一个包,用来处理从文件和流中产生的低级别 I/O。 javax.management 提供 Java Management Extensions 的核心类。 javax.management.loading 提供实现高级动态加载的类...

    java ATM 带注释和帮助文档

    在Java ATM项目中,注释应该清晰地解释代码的功能、目的以及如何使用各个类和方法。 7. **帮助文档**:帮助文档可能包含使用ATM模拟器的步骤、常见问题解答以及如何进行扩展或调试的指南。这对于其他开发者理解并...

    java源码包---java 源码 大量 实例

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    一个简易的计算器,带注释

    通过分析`counter.java`文件,我们可以逐步学习和理解以上知识点,从而掌握Java编程的基础,并了解如何构建一个简单的应用程序。对于初学者来说,这是一个很好的实践项目,可以提升对编程逻辑和面向对象编程的理解。

    利用Java的Properties 类读取配置文件信息

    在Java编程中,读取配置文件是常见的任务,主要用于存储应用程序的设置或环境变量,以方便管理和维护。Java提供了一个内置的`java.util.Properties`类,用于处理`.properties`文件,这种格式通常用来存储键值对,即...

    JAVA编写的工资打印程序代码

    在Java编程语言中,开发一个工资打印程序涉及到多个核心知识点,包括对象导向设计、数据处理、文件操作以及可能的数据库交互。以下是对这些关键概念的详细解释: 1. **对象导向设计**:Java是一种面向对象的语言,...

    Java导出Excel文件

    这些信息通常在源代码的注释或配置文件中给出。 总的来说,这个压缩包提供了一个完整的解决方案,可以帮助开发者快速理解和实现Java中导出包含数据和图片的Excel文件功能。通过学习和理解这个示例,你可以进一步...

    java统计单个文件行数

    对于`test.java`文件,如果它是一个Java源代码文件,我们还可以分析它的结构,例如统计注释行、空行和代码行。这需要更复杂的逻辑,可能涉及到正则表达式来匹配不同的行类型。 此外,如果需要统计大量文件的行数,...

    java经典基础编程题(包含代码,详细的注释以及思路的讲解)

    根据给定文件的信息,我们可以总结出以下几个相关的Java基础知识点: ### 1. 判断质数 (IsPrime) 在代码示例1中,我们看到一个简单的程序用于找出2到100之间的所有质数。该程序使用了两层循环来实现这一功能。 - ...

    java链表 链表的讲解 java源代码加注释

    总的来说,这些文件提供了链表数据结构在Java中的基本实现。通过阅读和理解这些源代码,初学者可以更好地掌握链表的工作原理,以及如何在实际编程中应用链表。同时,这也能帮助他们提升解决问题和设计数据结构的能力...

    Java代码统计实现

    在Java中,注释分为单行注释(//)和多行注释(/*...*/)。因此,代码统计程序需要能够识别这两种类型的注释并排除它们,同时,空行(仅包含空格和制表符)也需要被正确处理。 1. **代码解析**:实现这个功能的第一...

    java毕业设计项目源码---蓝宇快递打印系统

    综上所述,蓝宇快递打印系统是一个综合性的Java项目,它涵盖了编程基础、UI设计、数据库操作、文件处理、异常处理等多个方面,是学习和提升Java编程技能的好材料。通过研究和实践这个项目,开发者可以深入理解Java...

Global site tag (gtag.js) - Google Analytics