JAVA 实践项目 --- 树莓派信息自动化采集后入库项目 (三)

本贴最后更新于 2016 天前,其中的信息可能已经渤澥桑田

项目源代码可访问我的 github:https://github.com/Spacider/Gather-and-store
如果觉得好的话请给个 star 哦~

开发 IDE: IDEA 2018.03 JDK 1.8
开发环境: macOS 10.13.6 (如 windows 请对项目中部分路径进行改写)
数据库: Oracle 11g


第二阶段:数据的采集和写入日志文件

在 JAVA 实践项目---树莓派信息自动化采集后入库项目(二) 中我们从模拟的树莓派服务器上得到了我们需要采集的数据,接下来我们要干的事儿就是把得到的 XML 继续解析,等到相应的数据把其写入一个文件中!文件内容如下图所示:
imagepng


话不多说,开始编写代码:

  1. 在我们的 SAXReaderHelper 类中编写方法 InLogFile:将获取到数据写入到日志文件中。
public static void InLogFile(String str,String SensorAddress,String counter){
}

它由 3 个参数,分别是我们读取的 XML 文件(通过流实际上使用的是 String 来接收),由于 SensorAddresscounter 参数返回的 XML 文件中没有这两个参数,所以我们通过传参的方式把这两个参数传入!

这里我们又用到了 dom4j 技术对其进行解析:

 // 把客户端传过来的 xml 转化为字符串存储
String TotalStr = str.toString();
byte[] TotalBytes = TotalStr.getBytes();
// dom4j 构建对象内填入一个 byte 类型的数组
bais = new ByteArrayInputStream(TotalBytes);
SAXReader reader = new SAXReader();
Document document = null;

通过对象流的方式直接交给 dom4j:

try {
   document = reader.read(bais,"utf-8");
}

有了 document 对象以后我们就可以解析了,接下来我们用一个 StringBuilder 来对字符串进行拼接,拼接成上图我们讲过的样子。最后加上 "\r\n",这样最后写入文件的时候每一条数据会换行。

// 获取根节点
 Element Message = document.getRootElement();
 StringBuilder sb = new StringBuilder();
 // 拼接字符串
 sb.append(Message.element("SrcID").getText()+"|");
 sb.append(Message.element("DstID").getText()+"|");
 sb.append(Message.element("DevID").getText()+"|");
 sb.append(SensorAddress+"|");
 sb.append(counter+"|");
 sb.append(Message.element("Cmd").getText()+"|");
 sb.append(Message.element("Data").getText()+"|");
 sb.append(Message.element("Status").getText()+"|");
 sb.append(new Timestamp(System.currentTimeMillis()));
 sb.append("\r\n");

得到拼接好数据的字符串以后我们要做的就是写入文件了,这里用到了文件输出流,最后记得 flush 哦!刷一下内容才会进去
注意:请在 src 下先创建 radwtmp 文件,这里的 "/Users/wjh/Desktop/FirstProject/src/radwtmp" 路径为我电脑上路径,请改成你的路径!

File file = new File("/Users/wjh/Desktop/FirstProject/src/radwtmp");
if (!file.exists()){
  	file.createNewFile();
}
fos = new FileOutputStream(file,true);
fos.write(sb.toString().getBytes());
fos.flush();
  1. 封装好方法以后我们就可以调用它了,在 ClientReceiveHelperClientGetXml 方法最后加入这么一行:
// 根据 XML 文件解析,并将其写入文件中
SAXReaderHelper.InLogFile(sb.toString(), SensorAddress, counter + "");
  1. 编写客户端主程序:
    DataClient(温度湿度客户端),GuangClient(树莓派光照客户端),CarbonDioxideClient(二氧化碳客户端):
    传入 SensorAddress 为传感器 ID,16 表示温度湿度传感器,256 表示光照传感器,1280 表示二氧化碳传感器
 public static void DataGetObj(){
     ClientReceiveHelper.ClientGetXml("16",1);
 }
public static void guangGetObj(){
	ClientReceiveHelper.ClientGetXml("256",1);
}
public static void CarbonDioxideGetObj(){
     ClientReceiveHelper.ClientGetXml("1280",1);
}
  1. 为了方便操作,我们设立一个定时器,编写一个定时器类:
public final class TimerRunClient {

    public static void runClientMain() {
        // 构建定时器
        Timer timer = new Timer(false);

        /**
         * 第一个参数表示定时器执行的函数,第二个参数表示第一次定时器生效的时间,第三个参数表示每隔多长事件调用第一个参数所指向的方法
         * 第二个参数和第三个参数单位是毫秒
         */

        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                // 定时器调用的代码
                DataClient.DataGetObj();
                GuangClient.guangGetObj();
                CarbonDioxideClient.CarbonDioxideGetObj();
            }
        }, 0, 5000);
    }
    public static void main(String[] args) {
        runClientMain();
    }
}
  1. 运行定时器类(TimerRunClient)和树莓派系统数据模拟类(DataServer),看到 radwtmp 类中数据如下图所示即为成功!
    imagepng

本文中为代码详解,可能与源代码不一定相同,可以查看我的 github:https://github.com/Spacider/Gather-and-store 查看源代码与你的代码进行比对!如果觉得我写的好的话请给一个 star 哦!

  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3168 引用 • 8207 回帖 • 1 关注
  • 实践项目
    6 引用

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • WebClipper

    Web Clipper 是一款浏览器剪藏扩展,它可以帮助你把网页内容剪藏到本地。

    3 引用 • 9 回帖 • 6 关注
  • Python

    Python 是一种面向对象、直译式电脑编程语言,具有近二十年的发展历史,成熟且稳定。它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务。它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用缩进来定义语句块。

    536 引用 • 672 回帖
  • Elasticsearch

    Elasticsearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful 接口。Elasticsearch 是用 Java 开发的,并作为 Apache 许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

    116 引用 • 99 回帖 • 267 关注
  • ZooKeeper

    ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,是 Google 的 Chubby 一个开源的实现,是 Hadoop 和 HBase 的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

    59 引用 • 29 回帖 • 17 关注
  • ngrok

    ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。

    7 引用 • 63 回帖 • 599 关注
  • frp

    frp 是一个可用于内网穿透的高性能的反向代理应用,支持 TCP、UDP、 HTTP 和 HTTPS 协议。

    15 引用 • 7 回帖 • 9 关注
  • 深度学习

    深度学习(Deep Learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。

    40 引用 • 40 回帖
  • FreeMarker

    FreeMarker 是一款好用且功能强大的 Java 模版引擎。

    23 引用 • 20 回帖 • 426 关注
  • 大数据

    大数据(big data)是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。

    89 引用 • 113 回帖 • 1 关注
  • Sublime

    Sublime Text 是一款可以用来写代码、写文章的文本编辑器。支持代码高亮、自动完成,还支持通过插件进行扩展。

    10 引用 • 5 回帖
  • Gitea

    Gitea 是一个开源社区驱动的轻量级代码托管解决方案,后端采用 Go 编写,采用 MIT 许可证。

    4 引用 • 16 回帖 • 1 关注
  • 服务器

    服务器,也称伺服器,是提供计算服务的设备。由于服务器需要响应服务请求,并进行处理,因此一般来说服务器应具备承担服务并且保障服务的能力。

    124 引用 • 580 回帖
  • Typecho

    Typecho 是一款博客程序,它在 GPLv2 许可证下发行,基于 PHP 构建,可以运行在各种平台上,支持多种数据库(MySQL、PostgreSQL、SQLite)。

    12 引用 • 60 回帖 • 470 关注
  • Ant-Design

    Ant Design 是服务于企业级产品的设计体系,基于确定和自然的设计价值观上的模块化解决方案,让设计者和开发者专注于更好的用户体验。

    17 引用 • 23 回帖 • 1 关注
  • ReactiveX

    ReactiveX 是一个专注于异步编程与控制可观察数据(或者事件)流的 API。它组合了观察者模式,迭代器模式和函数式编程的优秀思想。

    1 引用 • 2 回帖 • 126 关注
  • OnlyOffice
    4 引用 • 26 关注
  • Solidity

    Solidity 是一种智能合约高级语言,运行在 [以太坊] 虚拟机(EVM)之上。它的语法接近于 JavaScript,是一种面向对象的语言。

    3 引用 • 18 回帖 • 349 关注
  • CodeMirror
    1 引用 • 2 回帖 • 116 关注
  • 职场

    找到自己的位置,萌新烦恼少。

    126 引用 • 1699 回帖
  • Bug

    Bug 本意是指臭虫、缺陷、损坏、犯贫、窃听器、小虫等。现在人们把在程序中一些缺陷或问题统称为 bug(漏洞)。

    77 引用 • 1741 回帖 • 2 关注
  • 工具

    子曰:“工欲善其事,必先利其器。”

    273 引用 • 679 回帖
  • SMTP

    SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。

    4 引用 • 18 回帖 • 588 关注
  • Oracle

    Oracle(甲骨文)公司,全称甲骨文股份有限公司(甲骨文软件系统有限公司),是全球最大的企业级软件公司,总部位于美国加利福尼亚州的红木滩。1989 年正式进入中国市场。2013 年,甲骨文已超越 IBM,成为继 Microsoft 后全球第二大软件公司。

    103 引用 • 126 回帖 • 448 关注
  • Windows

    Microsoft Windows 是美国微软公司研发的一套操作系统,它问世于 1985 年,起初仅仅是 Microsoft-DOS 模拟环境,后续的系统版本由于微软不断的更新升级,不但易用,也慢慢的成为家家户户人们最喜爱的操作系统。

    215 引用 • 462 回帖 • 1 关注
  • 分享

    有什么新发现就分享给大家吧!

    242 引用 • 1746 回帖 • 2 关注
  • NGINX

    NGINX 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 NGINX 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。

    311 引用 • 546 回帖 • 34 关注
  • danl
    63 关注