您的位置:首页 > 移动开发 > Android开发

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

2015-03-06 09:12 417 查看
在开发过程中发现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 {

/**
* 指定文件路径
*/
public static String dirPath = "C:\\Users\\chengxuyuan2\\Desktop\\model";

/**
* 指定文件格式
*/
public static String byteType = "GBK";

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

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

/**
* 对指定文件中写入指定内容
*
* @param content
* 写入内容
* @param dirPath
* 文件路径
* @param fileName
* 文件名称
* @param byteType
* 写入格式 GBK,UTF-8...
* @return
* @throws Exception
*/
public static boolean writeTxtFile(StringBuilder content, String dirPath,
String fileName, String byteType) throws Exception {
File dir = new File(dirPath);
File file = new File(dir, fileName);
createFile(dir, file);

RandomAccessFile mm = null;
boolean flag = false;
FileOutputStream o = null;
try {
o = new FileOutputStream(file);
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;
}

/**
* 创建model或者po
*
* @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 void createModel(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("\t@Override\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("\t@Override\n");
builder.append("\tpublic int describeContents() {\n");
builder.append("\t\treturn 0;\n");
builder.append("\t}\n\r");

// 第二个方法
builder.append("\t@Override\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\t@Override\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\t@Override\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("};");

}

// 写入文件
try {
writeTxtFile(builder, dirPath, className + ".java", byteType);
System.out.println("文件写入成功!");
} catch (Exception e) {
System.out.println("文件写入失败!");
e.printStackTrace();
}

}

public static void main(String[] args) {
// 创建model或者po测试
createModel("com.xy.pocket_book.po", "测试备注", "xiaoyi",
new Date().toLocaleString(), "其他信息备注", "BillPo", "Parcelable",
"id", "title", "parent_id", "other", "info", "remark");

}

}


自动生成的源码:

package com.xy.pocket_book.po;

import android.os.Parcel;

import android.os.Parcelable;

/**

* 测试备注

*

* @author xiaoyi
*

* 2015-3-6 9:44:30

*

* 其他信息备注

*

*/

public class BillPo implements Parcelable {

private String id;
private String title;
private String parent_id;
private String other;
private String info;
private String remark;

public BillPo() {}

public BillPo(String id,String title,String parent_id,String other,String info,String remark) {

super();
this.id = id;
this.title = title;
this.parent_id = parent_id;
this.other = other;
this.info = info;
this.remark = remark;
}

@Override
public String toString() {
return "BillPo [id=" + id + ", title=" + title + ", parent_id=" + parent_id + ", other=" + other + ", info=" + info + ",remark=" + remark + "]";
}

public String getId() {
return id;
}

public String getTitle() {
return title;
}

public String getParent_id() {
return parent_id;
}

public String getOther() {
return other;
}

public String getInfo() {
return info;
}

public String getRemark() {
return remark;
}

public void setId(String id) {
this.id = id;
}

public void setTitle(String title) {
this.title = title;
}

public void setParent_id(String parent_id) {
this.parent_id = parent_id;
}

public void setOther(String other) {
this.other = other;
}

public void setInfo(String info) {
this.info = info;
}

public void setRemark(String remark) {
this.remark = remark;
}

@Override
public int describeContents() {
return 0;
}

@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(id);
dest.writeString(title);
dest.writeString(parent_id);
dest.writeString(other);
dest.writeString(info);
dest.writeString(remark);
}

private static final Parcelable.Creator<BillPo> CREATOR = new Creator<BillPo>() {

@Override
public BillPo[] newArray(int size) {
return new BillPo[size];
}

@Override
public BillPo createFromParcel(Parcel source) {
BillPo mSource = new BillPo();
mSource.id = source.readString();
mSource.title = source.readString();
mSource.parent_id = source.readString();
mSource.other = source.readString();
mSource.info = source.readString();
mSource.remark = source.readString();
return mSource;
}
};

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