您的位置:首页 > 编程语言 > Java开发

由java文件自动生成as文件

2014-01-04 19:22 134 查看
import java.io.File;
import java.io.FileOutputStream;
import java.lang.reflect.Field;

public class ReflectUtil {

/**
* 自动根据 java 类 创建 actionScript 类文件
* @param sourceJavaRootFolderPath java文件的根目录 如“D:/workspace/jee35workspace/crm/src/”
* @param sourceJavaPackagePath java文件的包声明 如“com.crm.framework.domain.pojo”
* @param desAsRootFolderPath as文件的根目录 如“D:/workspace/jee35workspace/crm/flex_src/”
* @param desAsPackagePath as 文件的包声明 如“com.crm.framework.domain”
* @param isConvertChildJavaFile 是否连同子文件夹内的java文件一同替换
* @param isReplaceExistAsFile 是否覆盖已经存在的as文件
*/
public static void autoCreateAsFile(
String sourceJavaRootFolderPath,String sourceJavaPackagePath,
String desAsRootFolderPath,String desAsPackagePath,
boolean isConvertChildJavaFile,boolean isReplaceExistAsFile)throws Exception{
try {
String javaFolderPath = sourceJavaRootFolderPath;
String javaPackageName = sourceJavaPackagePath;
String asFolderPath = desAsRootFolderPath;
String asPackageName = desAsPackagePath;

String javaRealFolderPath = javaFolderPath +new String(javaPackageName).replace(".", "/");
String asRealFolderFilePath = asFolderPath +new String(asPackageName).replace(".", "/");
File dic = new File(javaRealFolderPath);
File asDic = new File(asRealFolderFilePath);
if(dic.exists() && dic.isDirectory()){
if(!asDic.exists()){
asDic.mkdirs();
}
File[] files = dic.listFiles();
for (int i = 0; i < files.length; i++) {
//寻找java文件
if(files[i].isFile() && files[i].getName().endsWith(".java")){
String classPath = javaPackageName+"."
+files[i].getName().substring(0, files[i].getName().length()-5);
System.out.println("path="+classPath);
Class<?> clazz=Class.forName(classPath);
Field[] fieldlist = clazz.getDeclaredFields();

//自动生成 as 文件
String asFileName = files[i].getName().replace(".java", ".as");
File[] asFiles = asDic.listFiles();
File existFile = null;
boolean isHave = false;
for (int k = 0; k < asFiles.length; k++) {
if(asFiles[k].getName().equals(asFileName)){
existFile = asFiles[k];
System.out.println("找到已存在文件:"+asFiles[k].getName());
isHave = true ;
break;
}
}
if(isHave && isReplaceExistAsFile){
System.out.println("删除已存在文件:"+existFile.getName());
existFile.delete();
isHave = false;
}
if(!isHave){
System.out.println("--------------开始生成文件:"+asFileName+"----------------");
String createAsPath = asRealFolderFilePath+"/"+asFileName;
File createFile = new File(createAsPath);
createFile.createNewFile();
StringBuffer sb = new StringBuffer();

sb.append("package "+asPackageName+"\n");
sb.append("{"+"\n");

for (int j = 0; j < fieldlist.length; j++) {
Field fld = fieldlist[j];
//自动生成引入字符串
if(fld.getType() == java.util.Set.class){
sb.append("     import mx.collections.ArrayCollection ;"+"\n");
}else if(fld.getType() == java.util.List.class){
sb.append("     import mx.collections.ArrayCollection ;"+"\n");
}else if(fld.getType().getName().startsWith(sourceJavaPackagePath)){
//如果类型是当前需要转换目录下的,说明是互相引用,可以自动生成
sb.append("     import "+fld.getType().getName().replaceFirst(sourceJavaPackagePath, asPackageName)+" ;"+"\n");
}
}

sb.append("\n");
sb.append("	[RemoteClass(alias=\""+javaPackageName+"."+files[i].getName().substring(0, files[i].getName().length()-5)+"\")]\n");
sb.append("	public class "+asFileName.replace(".as", "")+"\n");
sb.append("	{"+"\n");
sb.append("		public function "+asFileName.replace(".as", "")+"(){}"+"\n");

sb.append("\n");
for (int j = 0; j < fieldlist.length; j++) {
Field fld = fieldlist[j];
//字符串
if(fld.getType() == java.lang.String.class){
sb.append("		public var "+fld.getName()+":String ;"+"\n");
}else if(fld.getType() == java.util.Date.class){
sb.append("		public var "+fld.getName()+":Date ;"+"\n");
}else if(fld.getType() == java.lang.Integer.class){
sb.append("		public var "+fld.getName()+":int ;"+"\n");
}else if(fld.getType() == java.lang.Double.class){
sb.append("		public var "+fld.getName()+":Number ;"+"\n");
}else if(fld.getType() == java.lang.Float.class){
sb.append("		public var "+fld.getName()+":Number ;"+"\n");
}else if(fld.getType() == java.lang.Long.class){
sb.append("		public var "+fld.getName()+":Number ;"+"\n");
}else if(fld.getType() == java.util.Set.class){
sb.append("        public var "+fld.getName()+":ArrayCollection ;"+"\n");
}else if(fld.getType() == java.util.List.class){
sb.append("        public var "+fld.getName()+":ArrayCollection ;"+"\n");
}else if(fld.getType().getName().startsWith(sourceJavaPackagePath)){
//如果类型是当前需要转换目录下的,说明是互相引用,可以自动生成
sb.append("        public var "+fld.getName()+":"+fld.getType().getSimpleName()+" ;"+"\n");
}else{
System.out.println("##############未处理的属性及类型="+fld.getName()+" : "+fld.getType());
}
}
sb.append("	}"+"\n");
sb.append("}"+"\n");
//System.out.println(sb.toString());
FileOutputStream out = new FileOutputStream(createFile);
out.write(sb.toString().getBytes());
out.flush();
out.close();
}
}else if(files[i].isDirectory() && isConvertChildJavaFile){//扫描子文件夹
System.out.println(">>>>>>>>>>>>>>>>>扫描子文件夹="+files[i].getAbsolutePath());
autoCreateAsFile(sourceJavaRootFolderPath,sourceJavaPackagePath+"."+files[i].getName(),
desAsRootFolderPath,desAsPackagePath+"."+files[i].getName(),
isConvertChildJavaFile,isReplaceExistAsFile);
System.out.println("<<<<<<<<<<<<<<<<<退出子文件夹="+files[i].getAbsolutePath());
}
}
}
}catch(Exception e){
e.printStackTrace();
}
}

/**
*
*/
public static void main(String[] args) {
String javaFolderRootPath = "D:/workspace/bss_dev/syswinest/src/";
String javaPackageName = "com.syswin.est.estate.vo";
String asFolderRootPath = "D:/workspace/bss_dev/syswinest/flex_src/";
String asPackageName = "com.syswin.est.base.estate.model";

try {
ReflectUtil.autoCreateAsFile(javaFolderRootPath,javaPackageName,
asFolderRootPath,asPackageName,
true,true);
} catch (Exception e1) {
e1.printStackTrace();
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐