在开发进程中发现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,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;
}
};
};
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。