将文件添加到数据库中 - 交叉匹配内容以检查记录是否已存在

时间:2015-12-16 10:03:02

标签: java database sqlite dxf

我需要制作基于Windows的桌面软件。我有一些简单的autocad图纸文件(* .dxf)。如果我得到一张新图纸,我需要检查图纸是否存在于系统中。 * .dxf文件包含不同的部分(HEADER,CLASSES,ENTITIES ETC)。我只要求" ENTITIES"给出线坐标的部分。    例如,

ENTITIES
  0
LINE
  5
3B
  8
LAYER1
 10
221.190559
 20
185.708994
 30
0.0
 11
241.344721
 21
183.18762
 31
0.0
  0
LINE
  5
3C
  8
LAYER1
 10
241.344721
 20
183.18762
 30
0.0
 11
242.099368
 21
181.026461
 31
0.0
  0
ENDSEC

" 10"之后的下一行给出线的起点的x坐标 " 20"之后的行给出行的起始点的y坐标

" 11"给出最后一行的x坐标 排在" 21"给出行的最后一个点的y坐标

我需要提取这些值并添加到数据库中。  如果我得到一个新文件,我需要检查新图形是否与数据库中的任何图形匹配。这不是基于服务器的要求。我需要在我的电脑上使用它。 现在,我有java,sql的基础知识。任何人都可以指导我可能需要的所有工具以及我应该遵循的路线。

1 个答案:

答案 0 :(得分:0)

我将把答案分成两部分

提取相关信息

我认为HEADER&评估文件是否已更改时,不需要CLASSES部分。

我会将文件读入Java中的字符串(或者如果它们非常大,则使用流,但对于初学者来说,String更容易)。之后,您可以提取与您相关的部分 - 在您的情况下,它是实体部分。

如果您需要了解它将如何运作 - How to split a string in Java

与现有文件比较

我不会将整个字符串存储在数据库中,如果它只是用于匹配文件是否已存在。我会使用哈希函数来计算文件的哈希值(您可以将其想象为文档的指纹)并且只将哈希值存储在数据库中。当新文件到达时,您再次计算相关部分的哈希值,并将其与数据库中的现有哈希值进行匹配。这样,您不需要比较数据库中每个完整文件字节的字节,您只需要查看哈希 - 这将是一个简单的SELECT * FROM Files WHERE hash = ':yourhashgoeshere'

如果您不确定如何实施这种哈希方法 - Hash String via SHA-256 in Java