【代码提取】提取一个文件夹里面的所有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

智能推荐

什么是深度学习,深度学习和机器学习有什么关系?_深度学习,是机器学习的一种特定技术,称其为深度,是因为他有()结构。-程序员宅基地

文章浏览阅读3.2k次。深度学习的概念源于人工神经网络的研究。含多隐层的多层感知器就是一种深度学习结构。深度学习通过组合低层特征形成更加抽象的高层表示属性类别或特征,以发现数据的分布式特征表示。晦涩难懂的概念,略微有些难以理解,但是在其高冷的背后,却有深远的应用场景和未来。深度学习是实现机器学习的一种方式或一条路径。其动机在于建立、模拟人脑进行分析学习的神经网络,它模仿人脑的机制来解释数据。比如其按特定的物理距离连接;..._深度学习,是机器学习的一种特定技术,称其为深度,是因为他有()结构。

bootstrap tab切换后,刷新 页面 回到被选中的tab页签_bootstrap刷新页面-程序员宅基地

文章浏览阅读686次。描述:当使用bootstrap 的tab 进行页面切换后,一刷新页面,又回到了第一个初始页,从而又得重新切换,实现目标:例如当前切换到第三个页面后,刷新页面自动定位到第三个tab页面中。_bootstrap刷新页面

uniapp视频播放器(h5+app)

这是关于一篇在uniapp使用video视频播放器,支持自定义播放器样式,支持手势操作,选集、倍数和清晰度切换,支持SRT字幕格式。

uCosii从任务的建立到运行_ucosii用户任务中都有参数初始化,先执行哪个-程序员宅基地

文章浏览阅读823次。μC/OS-Ⅱ从任务的建立到运行提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、任务建立到运行整体流程二、分步功能实现1.μC/OS-Ⅱ初始化2.读入数据总结前言最近在学习ucosii实时操作系统,记录下学习过程,以待日后查阅.tips:本文所用ucosii版本为V2.86,硬件平台为STM32.一、任务建立到运行整体流程μC/OS-Ⅱ任务从建立到运行的整体流程如下所述:1. μC/OS-Ⅱ初始化: OSInit();2. 创建任务: Create_T_ucosii用户任务中都有参数初始化,先执行哪个

【燃料电池】燃料电池并网以最大额定功率运行研究(Simulink实现)_如何实现燃料电池大规模并网-程序员宅基地

文章浏览阅读260次。控制和电流谐振控制方法,增强了系统的稳定性,提高了供电质量。部分文献针对风力发电、太阳电池并网系统的小干扰稳定性进行研究,对燃料电池发电系统稳定性分析具有一定指导意义。文献[6,7]则分别建立太阳电池和风力发电系统的小信号模型,利用特征值分析法对系统的小干扰稳定性进行分析。文献[8]在光伏发电系统控制器参数进行全局优化以提高系统稳定性,但只考虑特征值作为单一优化目标,没有考虑阻尼比对系统稳定的影响,影响了控制参数的优化效果。在该模型中,燃料电池连接到电网,并由基于功率的控制器控制。行百里者,半于九十。_如何实现燃料电池大规模并网

AGI要闻:斯坦福李飞飞首次创业,瞄准“空间智能”;OpenAI下周发布搜索产品挑战谷歌;新的开源 AI 眼镜来了|钛媒体AGI | 最新快讯

她的专业领域是计算机视觉和认知神经科学。对于这家新的初创公司介绍,一位消息人士提到,上个月,李飞飞在温哥华 TED 大会上演讲中表示,最前沿的 AI 研究涉及一种算法,这种算法可以合理地推断出图像和文字在三维环境中的样子,并根据这些预测采取行动,这种算法使用的概念叫做“空间智能”。让机器狗在瑜伽球上保持平衡是很有挑战的任务,在没有大语言模型之前需要人去调整参数,但现在像 GPT-4 这样的大语言模型,因为本身就具备了丰富的物理知识,所以大语言模型可以代替人类去调整参数,并根据反馈的结果进行推理和参数调整。

随便推点

逆向_base64_rc4_----笔记_mdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmd-程序员宅基地

文章浏览阅读1k次。新人…学校比赛,没什么经验,上去见见世面某公司的月赛题 资源就不放了,只是当笔记Ida打开 有点小陷阱 巧妙的堆栈运用导致载入ida分析不了 得不到函数的边界比较幸运win32的程序od打开走一遍流程感受下00AD12E7 . 52 push edx00AD12E8 . 68 C821AD00 push 5ba358a4.00AD21C8 ..._mdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdaw

致 Tapdata 开源贡献者:聊聊 2022 年的进展和新一年的共建计划-程序员宅基地

文章浏览阅读781次。在内、外部开发者的合力之下,过去一年 Tapdata 新增数据源近20个,实现了60+数据源的接入能力。一个人可以走得很快,一群人可以走得更远,2023年期待与您共创更受欢迎的开源项目。_tapdata

python列表添加元素的三种方法定义集合数据对象_python 学习第三天 可迭代对象(列表,字典,元组和集合)...-程序员宅基地

文章浏览阅读642次。列表,字典,元组和集合列表 list列表是由一系列特定元素组成的,元素和元素之间没有任何关联关系,但他们之间有先后顺序关系列表是一种容器列表是序列的一种列表是可以被改变的序列Python中的序列类型简介(sequence)字符串(str) 列表(list) 元组(tuple) 字节串(bytes) 字节数组(bytearray)创建空列表的字面值L = [ ] # L绑定空列表创建非空列表: L ..._python 集合 对象元素

第十五周 项目 1 - 验证算法_insertht(hashtable ha[], int& n, int m, int p, key-程序员宅基地

文章浏览阅读316次。/* *Copyright (c) 2016,烟台大学计算机学院 *All right reserved. *文件名称:test.cpp *作者:杨天瑞 *完成日期:2016年12月16日 *版本号:v1.7.5 * * 问题描述:验证算法。 * 程_insertht(hashtable ha[], int& n, int m, int p, keytype k)

react-native之项目结构分析_react native课程的项目分析-程序员宅基地

文章浏览阅读6k次,点赞5次,收藏10次。前言庖丁为文惠君解牛,手之所触,肩之所倚,足之所履,膝之所踦,砉然响然,奏刀騞然,莫不中音。合于桑林之舞,乃中经首之会。熟悉项目的结构,是开发的基本也是技术提升的一个重要途径,现总结下自己对react-native项目结构的分析与理解。正文项目结构init 的一个项目结构如图:tests:测试文件夹,执行命令 “npm test”会调用此文件夹,在文件夹中需要引入待测试文件。android:An_react native课程的项目分析

uniapp开发公众号,微信开发者工具进行本地调试_uniapp使用微信开发者工具 利用公众号调试的方法-程序员宅基地

文章浏览阅读584次。uniapp开发公众号,微信开发者工具进行本地调试_uniapp使用微信开发者工具 利用公众号调试的方法