物联网农业数据监测系统(实现详情)

该项目一共有六个模块,涉及到的技术有;

反射,IO,网络编程,多线程,数据库连接池,预编译+批处理+手动提交,maven,svn

  1. 采集模块
  2. 网络模块
  3. 入库模块
  4. 日志模块
  5. 备份模块
  6. 配置模块

采集模块需求分析:

通过java中IO读取数据文件,将信息封装成环境数据的集合对象。

1. 使用IO流 读取本地文件

2. 读取到数据的每一行进行解析。

3. 对一行数据先拆分成9个部分。每个部分数据对应一个属性值。

4. 一行数据封装成一个ENV对象。

5. 将ENV对象保存在一个集合对象,作为返回结果

6. 将拆分读取到数据保存在对象的属性中 

 public Collection<Environment> gather() throws Exception {
        log.info("开始采集数据");
        //使用字符缓存输入流读取数据文件中每一行
        List<Environment> list = new ArrayList<>();
        //读取文件前先进行文件的判断
        File file = new File(fileName);
        if(!file.exists()){
            throw new GatherException("数据文件不存在,无法采集");
        }
        BufferedReader br = new BufferedReader(new FileReader(fileName));
        String line = null;//每行数据

        //获取每次文件的内容的大小
        FileInputStream fis = new FileInputStream(fileName);
        int size = fis.available();//本次读取数据文件的大小
        log.debug("本次读取数据大小:"+size);
        //获取保存在文件中的上次读取的数据字节大小
        //当第一次读取没有备份的数据
        Object o = backup.load(backupFile, Backup.LOAD_UNREMOVE);
        if(o != null){
            //获取到上次的备份的大小
            int beforeSize = (int) o;
            br.skip(beforeSize);//跳过上次读取过的数据
            log.debug("上次读取文件的大小:"+beforeSize);
        }
        //继续读取剩余的环境数据
        while((line = br.readLine()) != null){
            //根据分隔符拆分数据
            String[] arr = line.split("[|]");
            if(arr.length != 9){
                //当读取文件内容空行
                continue;
            }
            //将数组元素添加到环境对象中,环境对象的属性值
            Environment env = new Environment();
            init(env,arr);
            //根据传感器编号判断,对name和data进行赋值
            switch (arr[3]) {
                case "16":
                    env.setName("温度");
                    //57a4 ---10进制 --》公式计算
                    env.setData((Integer.parseInt(arr[6].substring(0,4),16) * (0.00268127F))-46.85F);
                    //当传感器为温湿度时,需要新增一个环境对象表示湿度
                    Environment humidityEnv = new Environment();
                    init(humidityEnv,arr);
                    humidityEnv.setData((Integer.parseInt(arr[6].substring(4,8),16) *0.00190735F)-6);
                    humidityEnv.setName("湿度");
                    list.add(humidityEnv);
                    break;
                case "256":
                    env.setName("光照强度");
                    //arr[6]---substr---String(16进制)---int10进制--->float
                    env.setData(Integer.parseInt(arr[6].substring(0,4),16));
                    break;
                case "1280":
                    env.setName("二氧化碳");
                    env.setData(Integer.parseInt(arr[6].substring(0,4),16));
                    break;
                default:
                    throw new GatherException("数据存在问题");
            }
            list.add(env);
        }

        //使用备份模块记录下当前文件中已经读取文件大小的标志

        backup.store(backupFile,size,Backup.STORE_OVERRIDE);

        log.info("完成采集数据"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值