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

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

/**
* 指定文件格式
*/
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⑻…
* @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(";

");
// +援用包
builder.append("import android.os.Parcel;
").append(
"import android.os.Parcelable;

");

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

// +类名称 接口
builder.append("public class ").append(className)
.append(" implements ").append(impI).append(" {
");
// +变量
for (int i = 0; i < variable.length; i++) {
builder.append(" private String ").append(variable[i])
.append(";
");
}
builder.append("

");
// +空构造
builder.append(" public ").append(className).append("() {}

");
// +参数构造
builder.append(" public ").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(") {
");
builder.append(" super();
");
for (int i = 0; i < variable.length; i++) {
builder.append(" this.").append(variable[i]).append(" = ")
.append(variable[i]).append(";
");
}
builder.append(" }

");

// +toString
builder.append(" @Override
");
builder.append(" public String toString() {
");
builder.append(" return "").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("]";
");
builder.append(" }

");

// +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(" public String get").append(str1.toUpperCase())
.append(str2).append("() {
");
builder.append(" return ").append(variable[i]).append(";
");
builder.append(" }
");
}

// +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(" public void set").append(str1.toUpperCase())
.append(str2).append("(String ").append(variable[i])
.append(") {
");
builder.append(" this.").append(variable[i]).append(" = ")
.append(variable[i]).append(";
");
builder.append(" }
");
}
// 如果使用Parcelable接口 添加两个方法1个实现
if (impI.equals("Parcelable")) {
// 第1个方法
builder.append(" @Override
");
builder.append(" public int describeContents() {
");
builder.append(" return 0;
");
builder.append(" }
");

// 第2个方法
builder.append(" @Override
");
builder.append(" public void writeToParcel(Parcel dest, int flags) {
");
for (int i = 0; i < variable.length; i++) {
builder.append(" dest.writeString(").append(variable[i])
.append(");
");
}
builder.append(" }
");

// 第3个实现
builder.append(" private static final Parcelable.Creator<")
.append(className).append("> CREATOR = new Creator<")
.append(className).append(">() {
");
builder.append(" @Override
");
builder.append(" public ").append(className)
.append("[] newArray(int size) {
");
builder.append(" return new ").append(className)
.append("[size];
");
builder.append(" }
");

builder.append(" @Override
");
builder.append(" public ").append(className)
.append(" createFromParcel(Parcel source) {
");
builder.append(" ").append(className)
.append(" mSource = new ").append(className)
.append("();
");
for (int i = 0; i < variable.length; i++) {
builder.append(" mSource.").append(variable[i])
.append(" = source.readString();
");
}
builder.append(" return mSource;
");
builder.append(" }
");
builder.append(" };
");
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⑶⑹ 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;
}
};

};

波比源码 – 精品源码模版分享 | www.bobi11.com
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!

波比源码 » android自动创建生成model或者po文件

发表评论

Hi, 如果你对这款模板有疑问,可以跟我联系哦!

联系站长
赞助VIP 享更多特权,建议使用 QQ 登录
喜欢我嘛?喜欢就按“ctrl+D”收藏我吧!♡