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

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

项目源代码可访问我的 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 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3205 引用 • 8217 回帖
  • 实践项目
    6 引用

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • Typecho

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

    12 引用 • 67 回帖 • 442 关注
  • 支付宝

    支付宝是全球领先的独立第三方支付平台,致力于为广大用户提供安全快速的电子支付/网上支付/安全支付/手机支付体验,及转账收款/水电煤缴费/信用卡还款/AA 收款等生活服务应用。

    29 引用 • 347 回帖
  • golang

    Go 语言是 Google 推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发 Go,是因为过去 10 多年间软件开发的难度令人沮丧。Go 是谷歌 2009 发布的第二款编程语言。

    500 引用 • 1396 回帖 • 253 关注
  • Git

    Git 是 Linux Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

    212 引用 • 358 回帖
  • 30Seconds

    📙 前端知识精选集,包含 HTML、CSS、JavaScript、React、Node、安全等方面,每天仅需 30 秒。

    • 精选常见面试题,帮助您准备下一次面试
    • 精选常见交互,帮助您拥有简洁酷炫的站点
    • 精选有用的 React 片段,帮助你获取最佳实践
    • 精选常见代码集,帮助您提高打码效率
    • 整理前端界的最新资讯,邀您一同探索新世界
    488 引用 • 384 回帖
  • Firefox

    Mozilla Firefox 中文俗称“火狐”(正式缩写为 Fx 或 fx,非正式缩写为 FF),是一个开源的网页浏览器,使用 Gecko 排版引擎,支持多种操作系统,如 Windows、OSX 及 Linux 等。

    7 引用 • 30 回帖 • 361 关注
  • Latke

    Latke 是一款以 JSON 为主的 Java Web 框架。

    71 引用 • 535 回帖 • 840 关注
  • Linux

    Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 Unix 的多用户、多任务、支持多线程和多 CPU 的操作系统。它能运行主要的 Unix 工具软件、应用程序和网络协议,并支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

    960 引用 • 946 回帖
  • H2

    H2 是一个开源的嵌入式数据库引擎,采用 Java 语言编写,不受平台的限制,同时 H2 提供了一个十分方便的 web 控制台用于操作和管理数据库内容。H2 还提供兼容模式,可以兼容一些主流的数据库,因此采用 H2 作为开发期的数据库非常方便。

    11 引用 • 54 回帖 • 681 关注
  • JVM

    JVM(Java Virtual Machine)Java 虚拟机是一个微型操作系统,有自己的硬件构架体系,还有相应的指令系统。能够识别 Java 独特的 .class 文件(字节码),能够将这些文件中的信息读取出来,使得 Java 程序只需要生成 Java 虚拟机上的字节码后就能在不同操作系统平台上进行运行。

    180 引用 • 120 回帖 • 6 关注
  • Unity

    Unity 是由 Unity Technologies 开发的一个让开发者可以轻松创建诸如 2D、3D 多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

    25 引用 • 7 回帖 • 108 关注
  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    948 引用 • 1460 回帖
  • Android

    Android 是一种以 Linux 为基础的开放源码操作系统,主要使用于便携设备。2005 年由 Google 收购注资,并拉拢多家制造商组成开放手机联盟开发改良,逐渐扩展到到平板电脑及其他领域上。

    337 引用 • 324 回帖 • 3 关注
  • ZooKeeper

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

    61 引用 • 29 回帖
  • Scala

    Scala 是一门多范式的编程语言,集成面向对象编程和函数式编程的各种特性。

    13 引用 • 11 回帖 • 164 关注
  • VirtualBox

    VirtualBox 是一款开源虚拟机软件,最早由德国 Innotek 公司开发,由 Sun Microsystems 公司出品的软件,使用 Qt 编写,在 Sun 被 Oracle 收购后正式更名成 Oracle VM VirtualBox。

    10 引用 • 2 回帖 • 17 关注
  • GitHub

    GitHub 于 2008 年上线,目前,除了 Git 代码仓库托管及基本的 Web 管理界面以外,还提供了订阅、讨论组、文本渲染、在线文件编辑器、协作图谱(报表)、代码片段分享(Gist)等功能。正因为这些功能所提供的便利,又经过长期的积累,GitHub 的用户活跃度很高,在开源世界里享有深远的声望,并形成了社交化编程文化(Social Coding)。

    213 引用 • 2043 回帖
  • 自由行
  • Shell

    Shell 脚本与 Windows/Dos 下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比 Windows 下的批处理更强大,比用其他编程程序编辑的程序效率更高,因为它使用了 Linux/Unix 下的命令。

    126 引用 • 83 回帖
  • AngularJS

    AngularJS 诞生于 2009 年,由 Misko Hevery 等人创建,后为 Google 所收购。是一款优秀的前端 JS 框架,已经被用于 Google 的多款产品当中。AngularJS 有着诸多特性,最为核心的是:MVC、模块化、自动化双向数据绑定、语义化标签、依赖注入等。2.0 版本后已经改名为 Angular。

    12 引用 • 50 回帖 • 526 关注
  • BND

    BND(Baidu Netdisk Downloader)是一款图形界面的百度网盘不限速下载器,支持 Windows、Linux 和 Mac,详细介绍请看这里

    107 引用 • 1281 回帖 • 44 关注
  • SMTP

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

    4 引用 • 18 回帖 • 650 关注
  • Mac

    Mac 是苹果公司自 1984 年起以“Macintosh”开始开发的个人消费型计算机,如:iMac、Mac mini、Macbook Air、Macbook Pro、Macbook、Mac Pro 等计算机。

    168 引用 • 598 回帖
  • 钉钉

    钉钉,专为中国企业打造的免费沟通协同多端平台, 阿里巴巴出品。

    15 引用 • 67 回帖 • 250 关注
  • 京东

    京东是中国最大的自营式电商企业,2015 年第一季度在中国自营式 B2C 电商市场的占有率为 56.3%。2014 年 5 月,京东在美国纳斯达克证券交易所正式挂牌上市(股票代码:JD),是中国第一个成功赴美上市的大型综合型电商平台,与腾讯、百度等中国互联网巨头共同跻身全球前十大互联网公司排行榜。

    14 引用 • 102 回帖 • 288 关注
  • 旅游

    希望你我能在旅途中找到人生的下一站。

    104 引用 • 908 回帖 • 1 关注
  • OAuth

    OAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是 oAuth 的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此 oAuth 是安全的。oAuth 是 Open Authorization 的简写。

    36 引用 • 103 回帖 • 37 关注