目标:给定文件,确定它是否属于给定类型(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
被抓住了”。解析时需要这样做。
答案 0 :(得分:9)
文件类型检测工具:
答案 1 :(得分:7)
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>
答案 2 :(得分:2)
对于那些不需要非常精确检测的人(rjdkolb提到的 Java 7&#39; Files.probeContentType 方法)
Path filePath = Paths.get("/path/to/your/file.jpg");
String contentType = Files.probeContentType(filePath);