【代码提取】提取一个文件夹里面的所有Java文件的类名函数名和变量名_从一个文件总提取出全部的函数或方法 java-程序员宅基地

技术标签: Java代码信息提取  C语言  

读取一个文件夹中的Java文件

#include<iostream>
#include<fstream>
#include<io.h>
#include<vector>
#include<string>
#include<stdlib.h>
using namespace std;

string s(_pgmptr);
char  filePath[] = "I:\\"; 
vector<string> files; 
void getFiles( string path, vector<string>& files )
{
	//文件句柄
	long   hFile   =   0;
	//文件信息
	struct _finddata_t fileinfo;
	string p;
	if((hFile = _findfirst(p.assign(path).append("\\*").c_str(),&fileinfo)) !=  -1)
	{
		do
		{
			//如果是目录,迭代之
			//如果不是,加入列表
			if((fileinfo.attrib &  _A_SUBDIR))
			{
				if(strcmp(fileinfo.name,".") != 0  &&  strcmp(fileinfo.name,"..") != 0)
					getFiles( p.assign(fileinfo.name), files );
			}
			else
			{
				files.push_back(p.assign(fileinfo.name) );
			}
		}while(_findnext(hFile, &fileinfo)  == 0);
		_findclose(hFile);
	}
}

int find(string s,string extension){
	int i = -1;
	for(;++i<s.length();){
		if(s[i] == '.' && s.substr(i+1,s.length()-i-1) == extension){
			return i;
		}
	}
	return -1;
}

string getStr(string name){
	return "\"" +s + "createCode.exe\" " + name;
}

int main(){
	cin>>filePath;
	获取该路径下的所有文件  
	string temp(filePath);
	s = s.substr(0,s.find_last_of("\\")+1);
	ofstream fout((temp + "FileName.txt").c_str());
	cout<<s<<endl;
	getFiles(filePath, files);  
	char str[30];  
	int size = files.size();  
	int i,j = 0;
	int index;
	
	for (i = 0;i < size;i++)  
	{  
		index = find(files[i],"java");
		if(index!=-1){
			fout<<files[i]<<endl;
			system(getStr(temp + files[i].substr(0,index) + ".").c_str());
		}
	}  
	fout.close();
	return 0;
}

上面的代码文件会调用以下代码来分析Java文件提取需要的信息

#pragma warning(disable: 4786)
#include<iostream>
#include<string>
#include<fstream>
#include<vector>
#include<iterator>
#include<ctype.h>
#include<io.h>
using namespace std;

#define PACKAGE   8
#define IMPORT    7
#define CLASS     3
#define VARIABLE  4
#define FUNCTION  5
#define UNDEINED  -1
#define NOTFOUND  0
#define HAVEFOUND 1

/**
 * 目前出现的问题:
 * 1. 不用制表符首行推进,而是用空格。函数没有识别到。
 */
class C{
public:
	string classname;//类的名字
	string extends;//类的extends
	vector<string> implements;//类的implements
	vector<string> var;//类的变量
	vector<string> function;//类的函数
	C(){
		extends = "";
		classname = "";
	}
	C(string extends){
		classname = "";
		this->extends = extends;
	}
};

vector<string> package;//package集合
vector<string> import;//import集合
vector<C> _c;//类的结合

//char p[50] = "I:\\Body.java";//想要分析的代码文件路径
//char q[50] = "I:\\Body.txt";//输出代码文件

char * filePath = "I:\\Android\\sample\\res\\drawable-mdpi"; 
vector<string> files; 

int judge(string s);//判断字符串名字返回不同的值
void D(string& str,char c);//在字符串str中循环删除字符c
void D(string& str,string s);//删除所有指定的字符串
void R(string& str);//以\r为判断删除注释
void D(string& str);//以\t为判断删除所有注释
vector<string> divideByTab(string &str);//以制表符为分隔符分解字符串成vector
void ignorespacetab(const string& str,int& fI);//fI停在非空格和制表符处
void ignorealnum(const string&str ,int&am
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u013580497/article/details/50422234

智能推荐

惊呆:程序员5月平均工资出炉,你拖后腿了吗?-程序员宅基地

文章浏览阅读724次。转载整理来自:猿大侠在IT界,程序员的工资一直是备受关注的,在世人的眼里,觉得程序员都是一个高薪的存在,但是真的是这样的吗,也不完全是,并不是所有的程序员工资都是一样的,同为程序员,薪资..._北京程序员5月平均工资

微信企业号开发之自定义菜单_企业微信开发应用管理菜单-程序员宅基地

文章浏览阅读6.7k次。一、登录到开放平台,进入开发者中心。二、点击自定义菜单选择创建菜单,发现需要 access_token 和 应用 id。三、去获取 access_token,应用 id 在 微信企业号开发平台《应用中心》的对应应用里。但是获取 access_token 还需要 corpid 和 corpsecret。四、获取 access_token 还需要 corpid 和 corpsecret。要去权限管理创建_企业微信开发应用管理菜单

硬盘突然变raw格式_磁盘分区变成RAW格式怎么办?手把手教你解决方法-程序员宅基地

文章浏览阅读2.1k次,点赞2次,收藏4次。分区变成RAW格式怎么办?移动硬盘、U盘、硬盘、SD卡都是很常用的数据存储设备,用户在平时使用这些设备的时候难免会因各种原因而遇到一些问题,例如分区变成RAW格式、无法访问、提示格式化、误删除等。遇到这种情况,用户将无法读取数据,从而面临数据丢失的风险。其实,分区变成RAW格式的时候,无需过于紧张,因为只要方法得当,是可以完美解决RAW问题的。现在就为大家介绍下如何正确处理RAW分区。分区变成RA..._硬盘格式怎么会变呢

python异步处理_使用Python中的工作池进行异步多处理:如何在超时后继续运行?...-程序员宅基地

文章浏览阅读207次。我想使用一个进程池运行一些作业,并应用一个给定的超时,之后应该杀死一个作业,并替换另一个处理下一个任务的作业.我曾尝试使用多处理模块,它提供了一种异步运行工作池的方法(例如使用map_async),但在那里我只能设置一个“全局”超时,之后所有进程都将被终止.是否有可能有一个单独的超时,之后只有一个耗时太长的进程被杀死,而一个新的worker再次被添加到池中(处理下一个任务并跳过超时的那个)?这是一..._map_aync()会跳过池中的作业

SAP的ABAP简单介绍-程序员宅基地

文章浏览阅读2.6w次,点赞7次,收藏104次。ABAP是SAP二次开发的面向对象的一门编程语言,主要包含报表开发,对话程序(你点程序中的东西,会跟着变化),增强这三大类。以下是SAP的开发包/类(对象,函数这些都包含这中间)SE21;都是以Z和Y字开头(这是SAP给用户的定义)。锁对象则是以E开头。我们现在用的包;一:主要是输入下两样2.注意我们的命名规则,先是功能+用户名+时间(这个请求可能会传到其它开发系统)3.在SE80(对象浏览器)下可以看到我们这个包的所有的东西;二:程序建立过程(SE38)如果点源代码,则可以在这_abap

Zeppelin架构原理分析_zeppelin原理-程序员宅基地

文章浏览阅读2.1k次。大纲:zeppelin整体架构分析 zeppelin-Interpreter Zeppelin-note zeppelin-paragraph一、Zeppelin整体架构分析首先上一张官方给出的Zeppelin整体架构图Apache Zeppelin的架构比较简单直观,总共分为3层:Zeppelin 前端 Zeppelin Serv..._zeppelin原理

随便推点

第一次做微信公众号前端开发个人总结_公众号前端怎么写项目职责-程序员宅基地

文章浏览阅读2.2k次,点赞4次,收藏27次。第一次进行前端开发,经验总结,个人记录使用语言 HTML5+CSS+PHP(不过由于需求方要求比较简单 并没有使用上PHP)使用框架:WEUI项目内容:微信公众号页面总结:1.菜鸟教程会讲述很多基本语法,所以html5、css、php等语言一些基本内容不懂可以去查阅学习一下,里面还有案例。附上链接:https://www.runoob.com/2.善于使用框架。WE..._公众号前端怎么写项目职责

HBase查找一条数据的过程_hbase 前缀查询取第一条-程序员宅基地

文章浏览阅读3.5k次。HBase中的Client如何路由到正确的RegionServer在HBase中,大部分的操作都是在RegionServer完成的,Client端想要插入,删除,查询数据都需要先找到相应的 RegionServer。什么叫相应的RegionServer?就是管理你要操作的那个Region的RegionServer。Client本身并 不知道哪个RegionServer管理哪个Region,那么..._hbase 前缀查询取第一条

MYSQl基础操作命令合集与详解_mysql在查询结果中进行二次查询-程序员宅基地

文章浏览阅读928次,点赞19次,收藏21次。用于定义和管理数据库结构,包括创建、修改和删除数据库对象。_mysql在查询结果中进行二次查询

内网安全之:域与域权限判断_怎么看域控-程序员宅基地

文章浏览阅读2.9k次,点赞5次,收藏28次。域与域权限判断1 域控基础1.1 活动目录1.2 域中的计算机分类1.3 域内权限解读2 查询当前域权限2.1 获取当前用户与域 SID2.2 判断是否存在域2.3 判断主域2.3.1 判断域控制器和DNS 服务器是否在同一服务器上1 域控基础1.1 活动目录活动目录(Active Directory,AD)是指域环境中提供目录服务的组件。目录用于存储有关网络对象(例如用户、组、计算机、共享资源、打印机和联系人等)的信息,目录服务是指帮助用户快速、准确地从目录中找到其所需要的的信息的服务。如果把_怎么看域控

基于原子轨道搜索算法优化的广义回归神经网络(GRNN)预测-程序员宅基地

文章浏览阅读741次,点赞28次,收藏23次。广义回归神经网络 CGRNN, Generalized Regression Neural Network)是美国学者 Don-aid F. Specht 在 1991 年提出的,它是径向基神经网络的一种。GRNN 具有很强的非线性映射能力和柔性网络结构以及高度的容错性和鲁棒性,适用于解决非线性问题。GRNN在逼近 能力和学习速度上较 RBF 网络有更强的优势,网络最后收敛于样本量积聚较多的优化回归 面,并且在样本数据较少时,预测效果也好。此外,网络还可以处理不稳定的数据。

线性代数复习 第六章 二次型_二次型矩阵a=1/2(a+at)-程序员宅基地

文章浏览阅读7k次,点赞3次,收藏15次。第六章 二次型6.1 基本概念和性质二次型的定义含有 nn 个未知量 x1,x2,...,xnx_1,x_2,...,x_n 的二次多项式 f(x1,x2,...,xn)=∑i=1n∑j=1naijxixj, (aij=aji)f(x_1, x_2,...,x_n) = \sum_{i=1}^n \sum_{j=1}^n a_{ij}x_ix_j,\ (a_{ij} = a_{ji}) 称为实数域上_二次型矩阵a=1/2(a+at)

推荐文章

热门文章

相关标签