之前在做一个小的桌面程序时,因为需要读取csv文件(","分隔)中的数据,所以查到了csvjdbc这个开源包:
http://sourceforge.net/projects/csvjdbc/
csvjdbc说的简单点就是将csv中的表格内容(一般都是类似于一个数据表格)当做数据库的Table,通过自封装的引擎驱动(类似于jdbc)去解析, 也就是说:用户可以使用“SELECT * FROM table”这样的语句来获取csv文件中的数据。
一 csvjdbc原版
我当时拿到的版本还是由 jackerm等人开发的最初的版本,实现的是非常简单的功能,仅仅是“SELECT * FROM table”,不支持"Where"等条件操作。而且csv文件中的内容也必须非常简单。
以下举例说明:
1. csv文件
ipAddress,macAddress,userName
192.168.1.2,00-00-00-00-00-00,X
192.168.1.3,00-00-00-00-00-01,Y
192.168.1.4,00-00-00-00-00-02,Z
...
...
...
2. Test java Code: 下面的注释很清楚我就不多说了
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
public class TestCsvJdbcConn {
/**
* CSV JDBC驱动
*/
private static final String CSV_JDBC_DRIVER = "org.relique.jdbc.csv.CsvDriver";
/**
* jdbc连接csv的 Header
*/
private static final String CSV_JDBC_HEADER = "jdbc:relique:csv:";
/**
* separator 参数设置: CSV 文件中数据分割符
*/
private static final String CSV_PROP_SEPARATOR = "separator";
/**
* separator 参数设置: 首行包含数据否
*/
private static final String CSV_PROP_SUPHEADER = "suppressHeaders";
/**
* fileExtension 参数设置: 文件类型
*/
private static final String CSV_PROP_FILEEXTEN = "fileExtension";
/**
* charset 参数设置: 字符集
*/
private static final String CSV_PROP_CHARSET = "charset";
/**
* 使用CSV JDBC驱动解析CSV文件
* parse
* @param csvDirectory String CSV文件所在目录
* @param csvName String CSV文件名(不包含文件类型)
*/
public final static void parse(final String csvDirectory, final String csvName) {
try {
// 加载CSV-JDBC驱动
Class.forName(CSV_JDBC_DRIVER);
// 解析CSV前的一些准备工作:解析参数设置
final Properties props = new java.util.Properties();
// 该CSV的数据是由','分隔
props.put(CSV_PROP_SEPARATOR, ",");
// 首行(去掉上面头行后的第一行)包含数据
props.put(CSV_PROP_SUPHEADER, "false");
// 要解析的文件类型
props.put(CSV_PROP_FILEEXTEN, ".csv");
// 字符集
props.put(CSV_PROP_CHARSET, "UTF-8");
// 创建一个connection. The first command line parameter is assumed to
// be the directory in which the .csv files are held
final Connection conn = DriverManager.getConnection(CSV_JDBC_HEADER
+ csvDirectory, props);
// create a Statement object to execute the query with
final Statement stmt = conn.createStatement();
// Select the ID and NAME columns from sample.csv
final ResultSet results =
stmt.executeQuery("SELECT "
+ " ipAddress macAddress userName "
+ " FROM "
+ csvName );
int i = 0;
while (results.next()) {
i++;
System.out.println(results.getString("ipAddress"));
}
// clean up
results.close();
stmt.close();
conn.close();
} catch (final ClassNotFoundException e) {
e.printStackTrace();
} catch (final SQLException e) {
e.printStackTrace();
}
}
}
二 csvjdbc改动
我发现我要解析的csv文件的头行(非数据行)不仅仅就1行,这种情况下原来的csvjdbc是没法满足这种情况的。于是准备着手修正csvjdbc来fix这个问题:
1.csv 文件
Date:2010-06-17 17:00:00
User:WWW
CopyRight: XXX
ipAddress,macAddress,userName
192.168.1.2,00-00-00-00-00-00,X
192.168.1.3,00-00-00-00-00-01,Y
192.168.1.4,00-00-00-00-00-02,Z
...
...
...
2. csvjdbc
下载其源码分析了下,改动还是非常简单的,只需要增加一个prop属性:"ignoreHeaderLineNumber",该属性用于定义你所需要忽略的头行的行数。具体就不罗嗦了,大家可以看附件中的源代码。
3. Test java代码,需要传入“ignoreHeaderLineNumber”属性
public class TestCsvJdbcConn {
/**
* CSV JDBC驱动
*/
private static final String CSV_JDBC_DRIVER = "org.relique.jdbc.csv.CsvDriver";
/**
* jdbc连接csv的 Header
*/
private static final String CSV_JDBC_HEADER = "jdbc:relique:csv:";
/**
* separator 参数设置: CSV 文件中数据分割符
*/
private static final String CSV_PROP_SEPARATOR = "separator";
/**
* separator 参数设置: 首行包含数据否
*/
private static final String CSV_PROP_SUPHEADER = "suppressHeaders";
/**
* fileExtension 参数设置: 文件类型
*/
private static final String CSV_PROP_FILEEXTEN = "fileExtension";
/**
* charset 参数设置: 字符集
*/
private static final String CSV_PROP_CHARSET = "charset";
/**
* ignoreHeaderLineNumber 参数设置: CSV文件头行数
*/
private static final String CSV_PROP_HEADERNUM = "ignoreHeaderLineNumber";
/**
* 使用CSV JDBC驱动解析CSV文件
* parse
* @param csvDirectory String CSV文件所在目录
* @param csvName String CSV文件名(不包含文件类型)
*/
public final static void parse(final String csvDirectory, final String csvName) {
try {
// 加载CSV-JDBC驱动
Class.forName(CSV_JDBC_DRIVER);
// 解析CSV前的一些准备工作:解析参数设置
final Properties props = new java.util.Properties();
// 该CSV的数据是由','分隔
props.put(CSV_PROP_SEPARATOR, ",");
// 无用的头行总共几行(不包含列名的行)
props.put(CSV_PROP_HEADERNUM, "3");
// 首行(去掉上面头行后的第一行)包含数据
props.put(CSV_PROP_SUPHEADER, "false");
// 要解析的文件类型
props.put(CSV_PROP_FILEEXTEN, ".csv");
// 字符集
props.put(CSV_PROP_CHARSET, "UTF-8");
// 创建一个connection. The first command line parameter is assumed to
// be the directory in which the .csv files are held
final Connection conn = DriverManager.getConnection(CSV_JDBC_HEADER
+ csvDirectory, props);
// create a Statement object to execute the query with
final Statement stmt = conn.createStatement();
// Select the ID and NAME columns from sample.csv
final ResultSet results =
stmt.executeQuery("SELECT "
+ " ipAddress macAddress userName "
+ " FROM "
+ csvName );
int i = 0;
while (results.next()) {
i++;
System.out.println(results.getString("ipAddress"));
}
System.out.println("i = " + i);
// clean up
results.close();
stmt.close();
conn.close();
} catch (final ClassNotFoundException e) {
e.printStackTrace();
} catch (final SQLException e) {
e.printStackTrace();
}
}
}
后记:
再后来我在http://sourceforge.net/projects/csvjdbc/上看到mfrasca一直在checkin源代码,聊了下,才发现他好像已经解决了我这个问题,而且还增加了对“Where”等条件SQL 语句的支持,具体更新了那些我不是很清楚,我请求他release新的版本、更新点和文档,不过目前看来好像只release了jar,其他文档之类的还没有。
没时间追了,不然可以好好分析分析实现原理等等的。
分享到:
相关推荐
4. **其他第三方库**:根据你的需求,可能还需要其他第三方库,如处理CSV、JSON数据的解析库。 在实际操作中,你可能需要根据具体的数据源和需求选择并添加额外的jar包。确保所有必要的依赖都已添加,并且与Solr的...
内容概要:本文介绍了基于博途1200PLC的新型彩色广告屏流水灯仿真系统的设计与实现。该系统利用博途1200PLC控制器、彩色广告屏、流水灯及相关传感器,实现了广告内容的自动化播放和流水灯的流水效果。系统通过PLC控制器对广告屏和流水灯进行编程控制,支持环境感知和智能化控制,提高了广告的吸引力和用户体验。此外,系统还采用了节能环保材料,降低了能耗和环境污染。 适合人群:从事工业自动化领域的工程师和技术人员,以及对PLC控制系统感兴趣的读者。 使用场景及目标:适用于商场、酒店、展览馆等需要展示广告的场所,旨在提升广告展示的效果和智能化水平,同时降低能耗和环境污染。 其他说明:该系统展示了PLC技术在现代广告展示中的创新应用,强调了高可靠性、灵活性和智能化的特点。随着科技的发展,该系统有望在更多领域得到广泛应用。
内容概要:本文详细介绍了西门子200PLC全自动定长度裁切机设备程序的设计与应用。该程序由主程序、长度设定程序、切割控制程序和注释程序组成,通过精确控制电机和气动元件的运作,实现了高精度的裁切效果。威纶通触摸屏程序的加入使操作更加简便,同时程序中添加了详细的中文注释,便于新手理解和掌握。此外,该程序不仅适用于特定设备,还可根据需要修改应用于其他类似设备。 适合人群:对工业自动化感兴趣的初学者以及从事相关工作的技术人员。 使用场景及目标:①帮助新手快速掌握西门子200PLC编程技巧;②提高工业生产中的裁切精度和效率;③提供一种简单易用的操作界面,提升工作效率。 其他说明:随着工业自动化技术的发展,该程序有望在未来得到更广泛的应用和改进。
内容概要:本文详细介绍了基于MATLAB平台使用YoloV3算法进行人体目标检测的方法。首先阐述了人体目标检测技术的重要性和应用场景,如公共场所、安防监控和自动驾驶等领域。接着简述了YoloV3算法的基础理论,强调其高效的目标检测能力。然后逐步讲解了实战操作流程,包括数据准备、环境配置、调用YoloV3算法以及结果展示与评估。最后提供了具体的MATLAB代码示例,帮助读者快速上手并实现人体目标检测。 适合人群:对计算机视觉和深度学习感兴趣的科研人员、工程师及学生。 使用场景及目标:适用于需要实现实时人体目标检测的应用场合,旨在提高检测速度和准确性,推动相关领域的技术创新和发展。 其他说明:随着AI技术的进步,未来会有更多先进算法应用于人体目标检测,带来更多可能性。
内容概要:本文探讨了基于自抗扰控制(ADRC)技术的永磁同步电机(PMSM)矢量控制策略。文中介绍了PMSM的特点及其广泛应用背景,指出了传统矢量控制存在的局限性,并详细阐述了ADRC的工作原理,包括跟踪微分器(TD)、扩张状态观测器(ESO)和非线性状态误差反馈控制律(NLSEF)。此外,还展示了如何将ADRC应用于PMSM的速度环和电流环控制中,通过具体代码实例解释了其实现过程。研究表明,ADRC可以显著提高PMSM在面对负载变化和其他扰动情况下的稳定性和响应速度。 适合人群:从事电机控制领域的研究人员和技术人员,尤其是关注永磁同步电机高性能控制方案的专业人士。 使用场景及目标:适用于需要改进现有PMSM控制系统鲁棒性和精度的应用场合,如工业自动化设备、电动汽车等领域。目标是帮助读者理解和掌握ADRC技术,从而优化PMSM的控制效果。 其他说明:尽管ADRC展现了优越的抗干扰能力,但其参数整定仍需深入研究,以确保最佳性能。
内容概要:本文探讨了表贴式永磁同步电机(SPMSM)中滑膜无位置观测器算法的最新进展。传统的一阶模型SMO观测器需要使用低通滤波器来滤除开关函数噪声,导致观测角度出现相位滞后,影响电机性能。新型的SMO无位置观测器通过扩张反电势状态,实现了无需低通滤波器即可精确估计反电动势,消除了相位滞后,提升了电机的稳定性和效率。此外,文中还介绍了滑膜技术的应用,确保电机在突加负载情况下仍能保持高效的运行状态。最后,提供了伪代码示例,展示了SMO无位置观测器的核心实现步骤。 适合人群:从事电机控制系统研究与开发的专业人士,以及对现代控制技术和电机控制感兴趣的科研人员和技术爱好者。 使用场景及目标:适用于需要提高电机控制精度和稳定性的应用场景,如电力传动系统、自动化设备、工业机器人等领域。目标是减少转速波动,提高系统的响应速度和鲁棒性。 其他说明:本文不仅深入剖析了理论背景,还提供了实际的算法实现思路,有助于读者更好地理解和应用这一先进技术。
实训商业源码-微信朋友圈-毕业设计.zip
实训商业源码-苹果CMS V10大气橙色风格影视电影视频网站模板-毕业设计.zip
实训商业源码-风吟导航-毕业设计.zip
数据集介绍:无人机视角多类别交通目标检测数据集 一、基础信息 数据集名称:无人机视角多类别交通目标检测数据集 数据规模: - 训练集:14,066张航拍图片 - 验证集:2,697张航拍图片 - 测试集:1,432张航拍图片 检测类别: - 载具类:汽车(car)、巴士(bus)、摩托车(motor)、船(tekne)、火车(tren) - 人员类:行人(insan)、工人(ismak) - 设施类:起重机(kam)、飞机(uap)、未知设备(uai) 标注格式: YOLO格式标注,包含目标边界框坐标及类别标签,适配主流检测框架 二、适用场景 智慧城市管理系统: 支持无人机航拍影像的实时交通流量分析,适用于城市道路车辆监控、港口船舶调度等场景 无人机应用开发: 为无人机自动巡检系统提供训练数据,支持电力巡检、铁路巡查等场景中的多目标识别 交通规划研究: 提供高空视角下的复杂交通场景样本,适用于交叉路口流量分析、交通设施布局优化等研究 安防监控系统: 包含人员与设备的协同检测能力,适用于工地安全监控、港口作业管理等安防场景 三、数据集优势 多维度覆盖: - 同时包含11类交通要素检测,覆盖陆地/水上/空中三维交通场景 - 包含不同天气条件下的高空视角样本,适应复杂环境检测需求 标注质量保障: - 严格校验的YOLO格式标注,确保坐标系统精准对应航拍视角 - 特殊处理小目标检测样本,优化无人机高空拍摄的像素级标注 任务适配性强: - 支持目标检测任务直接训练,兼容YOLOv5/v7/v8等主流版本 - 包含密集目标分布样本,适用于群体目标检测模型优化 场景多样性: - 涵盖城市道路、港口码头、铁路轨道等多种典型场景 - 包含不同光照条件下的日间作业场景样本
在当今城市化进程加速的背景下,消防安全已成为城市管理和经济发展的基石。面对频繁发生的火灾事故,如厦门BRT公交车纵火、芜湖液化气爆炸等,传统消防管理模式已难以满足现代城市的安全需求。为此,智慧消防信息体系应运而生,它以物联网、大数据、云计算等现代信息技术为支撑,旨在通过智能化手段提升消防工作的效率与精准度,为城市安全保驾护航。 一、智慧消防的需求背景与价值 智慧消防的需求源于多个方面。首先,随着国家治理体系信息化和治理能力现代化的推进,消防工作作为城市管理的重要组成部分,必须紧跟时代步伐,实现数字化转型。其次,传统消防管理模式存在“四轻四重”现象,即重硬件建设轻信息共享、重事后救援轻安全监控、重信息保密轻信息公开、重预案准备轻预警分析,这些问题严重制约了消防工作的有效开展。智慧消防通过构建一体化信息平台,打破信息壁垒,实现信息的实时共享与协同作战,有效解决了上述问题。 智慧消防的价值体现在多个层面。一方面,它利用物联网技术实现全面感知与互联,通过智能传感器、无线通信等手段,对消防设施、重点部位进行实时监测,确保火灾隐患早发现、早处置。另一方面,借助大数据分析技术,智慧消防能够对海量消防数据进行深度挖掘,提供精准的风险评估与预警服务,为消防决策提供科学依据。此外,智慧消防还通过打通基层、消防及各职能部门间的信息共享纽带,实现火警处置过程中的高效协同,提升整体应急响应能力。 二、智慧消防信息体系的核心功能与应用 智慧消防信息体系涵盖了多个核心功能模块,共同构建起一个全方位、多层次的消防安全防护网。其中,消防重点单位物联网监控是重要一环,通过接入既有火灾报警设施、安防视频监控及消防重要设施,实现对重点单位的连续有效监测。一旦发生火情,系统能够自动上报火警信号,并快速对接接处警系统,调派消防力量进行处置。 设施状态监测及上报功能则确保了消防设施的正常运行。系统能够自动监测用户单位消防水、电源、门状态等关键指标,及时发现并上报故障、违规事件,为消防设施的维护与管理提供有力支持。同时,公共消防设施状态监测功能也进一步拓展了消防安全的监测范围,通过监测城市消火栓的碰撞破坏、水压、开关状态等信息,为灭火处置提供便利条件。 社会消防安全网格化管理是智慧消防的另一大亮点。通过划分三级网格,建立权责分明的覆盖中小社会单位的消防管理网络体系,实现了消防安全的群防群治。网格员利用手机App进行日常检查、宣传、采集与报警工作,实现了消防工作的信息化与智能化。此外,安防视频接入与智能分析功能则通过接入平安城市、社会单位等视频资源,利用智能分析技术实现火灾早期探测、人员在岗检测等功能,显著提升了消防工作的主动性与精准性。 三、智慧消防信息体系的展望与未来 展望未来,智慧消防信息体系将继续遵循体系建设规律,运用体系工程方法,按照演化发展思路进行顶层设计、研制建设、集成验证与持续演进。通过不断优化系统架构、提升技术水平、完善标准规范等措施,智慧消防将更好地服务于城市消防安全需求,为构建安全、和谐、宜居的城市环境贡献力量。 同时,智慧消防的发展也将促进相关产业的繁荣与创新。随着物联网、大数据、云计算等技术的不断成熟与应用推广,智慧消防产业链将不断完善与拓展,形成包括设备制造、系统集成、运营服务在内的完整产业生态。这不仅将为消防行业带来新的增长点与发展机遇,也将为城市安全与应急管理领域注入新的活力与动力。 总之,智慧消防信息体系作为现代城市消防安全的重要保障手段之一,正以其独特的优势与潜力引领着消防行业的变革与发展。我们有理由相信,在未来的日子里,智慧消防将不断创造新的奇迹与辉煌,为城市的安全与繁荣贡献更大的力量。
内容概要:本文详细介绍了单直流输入双直流输出Buck转换器的设计原理及其仿真实现。首先简述了Buck转换器作为降压型直流电源转换器的工作机制,接着深入探讨了如何在一个20V输入下,分别输出15V/1A和5V/2A的具体设计方案。文中还展示了通过调节开关管占空比、电感值以及电容值等关键参数来达到预期输出效果的方法,并通过仿真实验验证了这一设计的有效性和稳定性。最后,作者提出了未来可能的研究方向,如提升电路效率和降低功耗。 适合人群:从事电力电子、嵌入式系统设计的专业人士和技术爱好者。 使用场景及目标:适用于希望深入了解Buck转换器工作原理及其应用的人群,特别是那些正在寻找解决多路直流供电问题解决方案的研发人员。 阅读建议:对于想要掌握更多有关Buck转换器的知识并应用于实际项目中的读者来说,本篇文章不仅提供了理论指导,还有具体的实验数据支持,因此非常适合用来做为学习资料或者参考资料。
内容概要:该数据集专注于灭火器检测,包含3255张图片,每张图片均进行了标注。数据集提供了两种格式的标注文件,分别是Pascal VOC格式的xml文件和YOLO格式的txt文件,确保了不同需求下的兼容性。所有图片为jpg格式,标注工具采用labelImg,通过矩形框对单一类别“extinguisher”进行标注,总计标注框数为6185个。数据集旨在支持计算机视觉领域的研究与开发,特别是针对物体检测任务,提供了高质量的标注数据; 适合人群:从事计算机视觉研究或开发的技术人员,尤其是专注于物体检测领域,如安防监控、智能消防系统的研发人员; 使用场景及目标:①作为训练集用于深度学习模型的训练,提升模型对灭火器识别的准确性;②用于测试和验证已有的检测算法性能; 其他说明:数据集不对基于其训练出的模型精度做保证,但承诺提供准确合理的标注。数据集仅含图片及对应的标注文件,不包括预训练模型或权重文件。
实训商业源码-飞飞-毕业设计.zip
实训商业源码-苹果CMS通用电影网站模板[优化版]-毕业设计.zip
3D点云匹配_基于Transformer+旋转不变性实现的点云匹配算法_附项目源码+流程教程_优质项目实战
实训商业源码-电商小程序模板-毕业设计.zip
实训商业源码-人生重开模拟器微信小程序源码-毕业设计.zip