根据文件中的字符查找文件类型

时间:2015-06-18 19:40:34

标签: java magic-numbers

我想找出.properties文件的文件类型,它基本上是一个文本文件。使用Apache tika和其他mime类型检测器打印出一个.properties文件为" text / plain" file作为用于文本文件和.properties的幻数将是相同的。

我想知道如何找出一种方法来区分这个基于.properties文件中的特殊字符或符号,其中=符号或ascii值= chr(61) 00111101在键/值对之间以及验证.extension类型。

因此,如果我说验证文件:如果文件包含=符号,而.extension类型是.properties,则返回put作为.properties文件。我不确定这是一个好方法,如果我能实现它,我将如何添加其他mime类型检测器,以便我可以检测所有其他格式,而不是具有不同的自定义类。

注意:我尝试在apche tika中添加自定义类型,但根本不起作用。如果你可以建议,可能是其他一些库(例如:MimeUtils)

2 个答案:

答案 0 :(得分:1)

首先,您必须知道要检查的文件的类型(如果是文本或二进制文件等),因为您必须知道如何阅读它。所以第一步是检测这是一个text / plain文件类型。 其次,要确定它是否是属性文件,还不足以检查" ="。因为你可能有这个:

key1=val1=val3
key2=val4
key3

从上面的三行中,只有第二行是有效的属性文件行。所以你需要检查文件的每一行是否遵循模式(它仅限于字符和数字,但你明白了):

^[a-zA-Z0-9_]+=[a-zA-Z0-9_]+!

我认为验证属性文件的一种简单方法是将文件内容加载到Properties对象中(请参阅java.util.Properties,有一种从资源加载它的方法)。

答案 1 :(得分:0)

Java属性文件几乎总是有一个" .properties"延期。除此之外,它没有可识别的签名。大多数读取此类文件的机制都希望它们是ISO-8859-1文本文件(因为这是在Java 6之前需要的),所以即使检查它们是否只包含ASCII字节也是不够的。

如果您知道文件中包含哪些键,则应使用Properties.load加载它,并检查Properties对象中的那些键。否则,检查文件名中的扩展名可能是您可以做的最可靠的事情。