读取一个文件夹中的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