我需要制作基于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的基础知识。任何人都可以指导我可能需要的所有工具以及我应该遵循的路线。
答案 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