android自动创建生成model或者po文件

在开发过程中发现model或者po层的数据只是参数不同,其他都是一样,而每次编写的时候同样的事情需要花费很多的时间去写或者拷贝。虽然有些能够快速生成,但是还是需要时间,比如Parcelable接口实现的时候需要写一些东西,现在使用一个对文件编写的类来自动生成文件相信能减少更多的时间。甚至如果开发的接口够规范的话还能直接解析接口生成model或者po文件。

源码如下:

import java.io.File;
import java.io.FileOutputStream;
import java.io.RandomAccessFile;
import java.util.Date;

/**
 * 在指定位置生成model或者po文件
 * @author xiaoyi
 *
 * 2015年3月6日
 */
public class CreateMode {

	/**
	 * 在指定位置判断并创建文件和文件夹
	 *
	 * @param dirPath
	 * @param fileName
	 * @return
	 * @throws Exception
	 */
	public static void createFile(String dirPath, String fileName)
			throws Exception {
		try {
			File dir = new File(dirPath);
			File file = new File(dir, fileName);
			// 在指定位置判断并创建文件夹
			if (dir.exists()) {
				System.out.println("model文件夹存在");

			} else {
				System.out.println("model文件夹不存在,创建model");
				dir.mkdir();// 不存在则创建
			}
			// 在指定位置判断并创建文件
			if (file.exists()) {
				System.out.println(fileName + "文件存在");
			} else {
				System.out.println(fileName + "文件不存在,新建" + fileName);
				file.createNewFile();// 不存在则创建
			}
		} catch (Exception e) {
			System.out.println(fileName + "文件创建失败!");
			e.printStackTrace();
		}
	}

	/**
	 * 对指定文件中写入指定内容
	 *
	 * @param content
	 *            写入内容
	 * @param fileName
	 *            文件名称
	 * @param byteType
	 *            写入格式 GBK,UTF-8...
	 * @return
	 * @throws Exception
	 */
	public static boolean writeTxtFile(StringBuilder content, File fileName,
			String byteType) throws Exception {
		RandomAccessFile mm = null;
		boolean flag = false;
		FileOutputStream o = null;
		try {
			o = new FileOutputStream(fileName);
			o.write(content.toString().getBytes(byteType));
			o.close();
			flag = true;
		} catch (Exception e) {
			System.out.println("文件内容写入失败!");
			e.printStackTrace();
		} finally {
			if (mm != null) {
				mm.close();
			}
		}
		return flag;
	}

	/**
	 * 创建需要写入的内容
	 *
	 * @param packageName
	 *            项目包名 比如:com.xy.pocket_book.po
	 * @param remark
	 *            对该po的说明备注
	 * @param author
	 *            作者
	 * @param time
	 *            创建时间
	 * @param otherInfo
	 *            其他说明
	 * @param className
	 *            类名
	 * @param impI
	 *            需要实现的接口 Parcelable or Serializable
	 * @param variable
	 *            成员变量
	 * @return
	 */
	private static StringBuilder createContant(String packageName,
			String remark, String author, String time, String otherInfo,
			String className, String impI, String... variable) {
		StringBuilder builder = new StringBuilder();
		// +项目包路径
		builder.append("package ").append(packageName).append(";\n\r\n\r");
		// +引用包
		builder.append("import android.os.Parcel;\n\r").append(
				"import android.os.Parcelable;\n\r\n\r");

		// +po注释 作者 日期等
		builder.append("/**\n\r").append(" * ").append(remark).append("\n\r");
		builder.append(" * ").append("\n\r");
		builder.append(" * ").append("@author ").append(author).append("\n");
		builder.append(" * ").append("\n\r");
		builder.append(" * ").append(time).append("\n\r");
		builder.append(" * ").append("\n\r");
		builder.append(" * ").append(otherInfo).append("\n\r");
		builder.append(" * ").append("\n\r");
		builder.append(" */ ").append("\n\r");

		// +类名称 接口
		builder.append("public class ").append(className)
				.append(" implements ").append(impI).append(" {\n\r");
		// +变量
		for (int i = 0; i < variable.length; i++) {
			builder.append("\tprivate String ").append(variable[i])
					.append(";\n");
		}
		builder.append("\n\r\n\r");
		// +空构造
		builder.append("\tpublic ").append(className).append("() {}\n\r\n\r");
		// +参数构造
		builder.append("\tpublic ").append(className).append("(");
		for (int i = 0; i < variable.length; i++) {
			if (i == variable.length - 1) {
				builder.append("String ").append(variable[i]);
			} else {
				builder.append("String ").append(variable[i]).append(",");
			}
		}
		builder.append(") {\n\r");
		builder.append("\t\tsuper();\n");
		for (int i = 0; i < variable.length; i++) {
			builder.append("\t\tthis.").append(variable[i]).append(" = ")
					.append(variable[i]).append(";\n");
		}
		builder.append("\t}\n\r\n\r");

		// +toString
		builder.append("\[email protected]\n");
		builder.append("\tpublic String toString() {\n");
		builder.append("\t\treturn \"").append(className).append(" [");
		for (int i = 0; i < variable.length; i++) {
			if (i == variable.length - 1) {
				// name=" + name + "
				builder.append(variable[i]).append("=\" + ")
						.append(variable[i]).append(" + \"");

			} else if (i == 0) {
				// name=" + name + ",
				builder.append(variable[i]).append("=\" + ")
						.append(variable[i]).append(" + \",");
			} else {
				builder.append(" ").append(variable[i]).append("=\" + ")
						.append(variable[i]).append(" + \",");
			}
		}
		builder.append("]\";\n");
		builder.append("\t}\n\r\n\r");

		// +get
		for (int i = 0; i < variable.length; i++) {
			String str1 = variable[i].substring(0, 1);
			String str2 = variable[i].substring(1, variable[i].length());
			builder.append("\tpublic String get").append(str1.toUpperCase()).append(str2).append("() {\n");
			builder.append("\t\treturn ").append(variable[i]).append(";\n");
			builder.append("\t}\n\r");
		}

		// +set
		for (int i = 0; i < variable.length; i++) {
			String str1 = variable[i].substring(0, 1);
			String str2 = variable[i].substring(1, variable[i].length());
			builder.append("\tpublic void set").append(str1.toUpperCase()).append(str2).append("(String ").append(variable[i]).append(") {\n");
			builder.append("\t\tthis.").append(variable[i]).append(" = ").append(variable[i]).append(";\n");
			builder.append("\t}\n\r");
		}
		// 如果使用Parcelable接口 添加两个方法一个实现
		if(impI.equals("Parcelable")){
			// 第一个方法
			builder.append("\[email protected]\n");
			builder.append("\tpublic int describeContents() {\n");
			builder.append("\t\treturn 0;\n");
			builder.append("\t}\n\r");

			// 第二个方法
			builder.append("\[email protected]\n");
			builder.append("\tpublic void writeToParcel(Parcel dest, int flags) {\n");
			for (int i = 0; i < variable.length; i++) {
				builder.append("\t\tdest.writeString(").append(variable[i])
				.append(");\n");
			}
			builder.append("\t}\n\r");

			// 第三个实现
			builder.append("\tprivate static final Parcelable.Creator<")
			.append(className).append("> CREATOR = new Creator<")
			.append(className).append(">() {\n\r");
			builder.append("\t\[email protected]\n");
			builder.append("\t\tpublic ").append(className)
			.append("[] newArray(int size) {\n");
			builder.append("\t\t\treturn new ").append(className)
			.append("[size];\n");
			builder.append("\t\t}\n\r");

			builder.append("\t\[email protected]\n");
			builder.append("\t\tpublic ").append(className)
			.append(" createFromParcel(Parcel source) {\n");
			builder.append("\t\t\t").append(className).append(" mSource = new ")
			.append(className).append("();\n");
			for (int i = 0; i < variable.length; i++) {
				builder.append("\t\t\tmSource.").append(variable[i])
				.append(" = source.readString();\n");
			}
			builder.append("\t\t\treturn mSource;\n");
			builder.append("\t\t}\t\n");
			builder.append("\t};\n\r");
			builder.append("};");

		}

		return builder;

	}

	public static void main(String[] args) {
		// 换行符/n /r /t
		// StringBuilder builder = new StringBuilder(19);
		// builder.append("621363") .append("1")
		// 1.创建文件
		try {
			createFile("C:\\Users\\chengxuyuan2\\Desktop\\model", "aa.java");
		} catch (Exception e) {
			e.printStackTrace();
		}
		// 2.创建写入内容
		StringBuilder builder = createContant("com.xy.pocket_book.po", "测试备注",
				"xiaoyi", new Date().toLocaleString(), "其他信息备注", "BillPo",
				"Parcelable", "id", "title", "parent_id", "remark");

		// 3.写入内容
		File f = new File("C:\\Users\\chengxuyuan2\\Desktop\\model\\aa.java");
		try {
			writeTxtFile(builder, f, "GBK");
			System.out.println("文件写入成功!");
		} catch (Exception e) {
			System.out.println("文件写入失败!");
			e.printStackTrace();
		}
	}

}
时间: 2024-10-10 05:52:29

android自动创建生成model或者po文件的相关文章

BPM合同管理——应用合同模板,自动创建生成

BPM合同管理——应用合同模板,自动创建生成 Ultimus流程化合同管理系统可以支持客户以合同模板自动生成的合同创建方式,对于具备标准化合同模板条件的客户,提供模板管理.模板套用.文本自动生成,支持企业各类合同进行自动创建. 一.合同起草方式.多场景应用 1.合同线下起草,直接附件上传 对于用户线下起草的合同附件,Ultimus流程化合同管理系统支持上传操作应用.这种起草方式最简单,但是相对而言,无法控制合同版本以及规范性,审阅时也很麻烦. 2.基于模板,把控关键合同要素 基于模版在线起草合同

mybatis generator自动生成model,mapper等文件

mybatis generator 介绍 mybatis generator中文文档http://mbg.cndocs.tk/ MyBatis Generator (MBG) 是一个Mybatis的代码生成器 MyBatis 和 iBATIS. 他可以生成Mybatis各个版本的代码,和iBATIS 2.2.0版本以后的代码. 他可以内省数据库的表(或多个表)然后生成可以用来访问(多个)表的基础对象. 这样和数据库表进行交互时不需要创建对象和配置文件. MBG的解决了对数据库操作有最大影响的一些

android项目创建xml和存储xml文件

学安卓复习java基础 因为项目需要刷新出昨天的文章,因此之前点击一份电子杂志,创建一个新的xml文件的方式就不对了,因为电子杂志不同于新闻,不会时时更新,因此一条更新一次,所以我需要每天下载一份它的RSS 源的xml文件到项目里(曾经居然想下载到手机的sd卡里),文件命名格式以时间加上杂志名,那么我每天需要创建这些xml,在项目下创建文件可以在files和cache中创建,我选择在files下创建. File file1 = null,file2=null,file3=null,file4=n

使用Generator 自动生成 model mapper mapping 文件

1.下载包 地址http://download.csdn.net/detail/u012909091/7206091 2.下载完成解压文件到任意目录 3.删除下mybatis-generator-core-1.3.2\mybatis-generator-core-1.3.2\lib\src下的所有文件 4.修改配置文件 mybatis-generator-core-1.3.2\mybatis-generator-core-1.3.2\lib\generatorConfig.xml文件 <?xml

使用MybatisGenerator自动生成Model,Mapping和Mapper文件

Mybatis和Hibernate都是持久层框架,MyBatis出现的比Hibernate晚,这两种框架我都用过,对于二者的优势我的感触不深,个人感觉MyBatis自动生成model,Mapping,mapper文件的功能使编码量减少,但也很容易出错,出错后还不易排查. 我在网上搜索了一下关于Mybatis和Hibernate的比较,知乎上的这个帖子讲得比较详细,大家可以参考一下 https://www.zhihu.com/question/21104468 想要自动生成文件,首先要下载MyBa

自动生成Mybatis的Mapper文件

自动生成Mybatis的Mapper文件 工作中使用mybatis时我们需要根据数据表字段创建pojo类.mapper文件以及dao类,并且需要配置它们之间的依赖关系,这样的工作很琐碎和重复,mybatis官方也发现了这个问题,因此给我们提供了mybatis generator工具来帮我们自动创建pojo类.mapper文件以及dao类并且会帮我们配置好它们的依赖关系. 实际上,最非常流行MyBatis-Plus中内置了代码生成器:采用代码或者 Maven 插件可快速生成 Mapper . Mo

File类和各种io类会不会自动创建文件

File类是不会自动为你生成文件的,它只是为你定位这么一个地方,倘若需要为这个位置上的这个Fiel类所指定的文件名新建一个文件就得用到File类的一个成员方法:public boolean createNewFile() throws IOException如果是建立临时文件则用的是:public static File createTempFile(String prefix, String suffix) throws IOException或着是public static File cre

Android Studio创建项目

创建项目 首先,先指出Android Studio中的两个概念. Project 和 Module .在Android Studio中, Project 的真实含义是工作空间, Module 为一个具体的项目. 在 Eclipse 中,我们可以同时对多个 Eclipse 的 Project 进行同时编辑,这些 Project 在同一个 workspace 之中.在Android Studio中,我们可以同时对多个Android Studio的 Module 进行同时编辑,这些 Module 在同

使用Android Studio创建Android项目

创建项目 首先,在Android Studio中: Project 和 Module, Project 的真实含义是工作空间, Module 为一个具体的项目. 在 Eclipse 中,可以同时对多个 Eclipse 的 Project 进行同时编辑,这些 Project 在同一个 workspace 之中.在Android Studio中,我们可以同时对多个Android Studio的 Module 进行同时编辑,这些 Module 在同一个 Project 之中. Eclipse 的 Pr