由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(); } } }
相关文章推荐
- AS上NDK自动生成对应java文件的jni头文件
- 使用javah自动生成JNI的.h文件
- eclipse 开发android 项目的时候系统自动生成的R.Java文件在重新生成时候丢失问题
- r cannot be resolved to a variable 问题解决 / r.java文件没有自动生成
- [Java] 自动生成visual studio项目文件
- r cannot be resolved to a variable 问题解决 / r.java文件没有自动生成
- eclipse 新建 java 文件时自动生成注释
- 无法自动生成或更新R.java文件
- Eclipse下编写java程序突然不会自动生成R.java文件和包的解决办法
- android R.java资源文件不自动生成的原因
- 【Java】Eclipse新建的Java文件自动生成主函数、控制台输出行数不再受限制
- 哪些年遇到过的Andriod问题(9)R.java文件不能自动生成解决方法
- android 典型问题:R.java文件不能自动生成的解决办法
- Andtroidstudio1.5不能自动生成R.java文件
- Android Studio开发环境建立aidl文件,怎么生成相应的java文件? Android Studio开发环境建立aidl文件,不自动生成java文件?在Eclipse中建立aidl文件后在
- eclipse下编写android程序突然不会自动生成R.java文件和包的解决办法
- java笔记之使用Mybatis-Generator自动生成Dao、Model、Mapping相关文件2种方法
- 使用自动生成java文件和自动编译的静态代理模式-马士兵设计模式教程
- 使用Hibernate-tools中的hbm2java和hbm2ddl根据hbm文件自动生成pojo和数据库脚本
- eclipse 新建 java 文件时自动生成注释