目标:给定文件,确定它是否属于给定类型(XML、JSON、属性等)
考虑 XML 的情况 - 在我们遇到这个问题之前,以下示例方法运行良好:
try {
saxReader.read(f);
} catch (DocumentException e) {
logger.warn(" - File is not XML: " + e.getMessage());
return false;
}
return true;
正如预期的那样,当 XML 格式良好时,测试将通过并且方法将返回 true。如果发生错误并且无法解析文件,将返回 false。
然而,当我们处理格式错误的 XML(尽管仍然是 XML)文件时,这会中断。
我宁愿不依赖
.xml
扩展(总是失败),在文件等中寻找 <?xml version="1.0" encoding="UTF-8"?>
字符串。
还有其他方法可以处理吗?
您必须在文件中看到什么才能“怀疑它可能是 XML,尽管
DocumentException
被捕获”。这是解析目的所必需的。
文件类型检测工具:
Apache Tika 给我带来的问题最少,并且与 Java 7+ 不同,它不是特定于平台的:Files.probeContentType
import java.io.File;
import java.io.IOException;
import javax.activation.MimeType;
import org.apache.tika.Tika;
File inputFile = ...
String type = new Tika().detect(inputFile);
System.out.println(type);
对于 xml 文件,我得到“application/xml”
对于属性文件,我得到“text/plain”
但是,您可以将探测器添加到新的 Tika()
<dependency>
<groupId>org.apache.tika</groupId>
<artifactId>tika-core</artifactId>
<version>1.xx</version>
</dependency>
对于那些不需要非常精确检测的人(rjdkolb提到的Java 7的Files.probeContentType方法)
Path filePath = Paths.get("/path/to/your/file.jpg");
String contentType = Files.probeContentType(filePath);