【代码提取】提取一个文件夹里面的所有Java文件的类名函数名和变量名

读取一个文件夹中的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
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值