提供对应的属性值,并提供无参和多参构造器.
代码如下:
public class Environment implements Serializable{
private static final long serialVersionUID = 1L;
//环境种类名称
private String name;
//发送端id
private String srcId;
//树莓派系统id
private String desId;
//实验箱区域模块id(1-8)
private String devId;
//模块上传感器地址
private String sersorAddress;
//传感器个数
private int count;
//发送指令标号 3表示接收数据 16表示发送命令
private String cmd;
//状态 默认1表示成功
private int status;
//环境值
private float data;
//采集时间
private Timestamp gather_date;
public Environment() {}
public Environment(String name, String srcId, String desId, String devId,
String sersorAddress, int count, String cmd, int status,
float data, Timestamp gather_date) {
this.name = name;
this.srcId = srcId;
this.desId = desId;
this.devId = devId;
this.sersorAddress = sersorAddress;
this.count = count;
this.cmd = cmd;
this.status = status;
this.data = data;
this.gather_date = gather_date;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSrcId() {
return srcId;
}
public void setSrcId(String srcId) {
this.srcId = srcId;
}
public String getDesId() {
return desId;
}
public void setDesId(String desId) {
this.desId = desId;
}
public String getDevId() {
return devId;
}
public void setDevId(String devId) {
this.devId = devId;
}
public String getSersorAddress() {
return sersorAddress;
}
public void setSersorAddress(String sersorAddress) {
this.sersorAddress = sersorAddress;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
public String getCmd() {
return cmd;
}
public void setCmd(String cmd) {
this.cmd = cmd;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
public float getData() {
return data;
}
public void setData(float data) {
this.data = data;
}
public Timestamp getGather_date() {
return gather_date;
}
public void setGather_date(Timestamp gather_date) {
this.gather_date = gather_date;
}
@Override
public String toString() {
return "Environment [name=" + name + ", srcId=" + srcId + ", desId="
+ desId + ", devId=" + devId + ", sersorAddress="
+ sersorAddress + ", count=" + count + ", cmd=" + cmd
+ ", status=" + status + ", data=" + data + ", gather_date="
+ gather_date + "]";
}
}
2.运用包装文件字符流逐行读取文件的内容:
问题1.当读取到温度的时候需要区分两个对象,其中我们需要运用反射的方法区调用第二个对象。
问题2.当读取到属性的时候需要将string类型的数字按照"|"进行分割
问题3.当读取到date和timestamp的时候需要将16进制的数据转化为十进制类型
timestamp类型的时间戳读取需要将long类型转化为date类型
代码如下:
public class Gatherimpl implements Gather {
private String filePath = "file";
@Override
public Collection gather() {
Collection list = new ArrayList<>();
// 1.读取文件 date-file-simple
// 2.读取每一行数据
// 3对数据进行分析
// 3.1 16 温度前四位
// 3.2 16湿度中间四位
// 3.3 256 光照强度
// 3.4 1280 co2浓度
// 100|101|2|16|1|3|5d606f7802|1|1516323596029
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader(filePath));
String line = null;
Environment env1=null;
Environment env2=null;
while ((line = br.readLine()) != null) {
String[] str = line.split("[|]");
if (str.length == 9) {
env1=new Environment();
env1.setSrcId(str[0]);
env1.setDesId(str[1]);
env1.setDevId(str[2]);
env1.setSersorAddress(str[3]);
env1.setCount(Integer.parseInt(str[4]));
env1.setCmd(str[5]);
env1.setStatus(Integer.parseInt(str[7]));
env1.setGather_date(new Timestamp(Long.valueOf(str[8])));
switch (env1.getSersorAddress()) {
case "16":
env2=copy(env1);
env1.setName("温度");
env1.setData((Integer.parseInt(str[6].substring(0, 4), 16) * (0.00268127F)) - 46.85F);
env2.setName("湿度");
env2.setData((Integer.parseInt(str[6].substring(4, 8), 16) * 0.00190735F) - 6);
list.add(env2);
break;
case "256":
env1.setName("光照强度");
env1.setData(Integer.parseInt(str[6].substring(0, 4), 16));
case "1280":
env1.setName("二氧化碳");
env1.setData(Integer.parseInt(str[6].substring(0, 4), 16));
default:
System.out.println("数据的地址填写不符合类型"+env1.getSersorAddress()+"(16+256+1280)");
break;
}
} else {
System.out.println("传入数据有误");
}
list.add(env1);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if(br!=null) {
try {
br.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
return list;
}



