这是我阅读mime类型的课程。我正在尝试添加一个新的mime类型(属性文件)并读取它。
这是我的班级档案:
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package check_mime;
import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
import org.apache.tika.Tika;
import org.apache.tika.mime.MimeTypes;
public class TikaFileTypeDetector {
private final Tika tika = new Tika();
public TikaFileTypeDetector() {
super();
}
public String probeContentType(Path path) throws IOException {
// Check contents first
String fileContentDetect = tika.detect(path.toFile());
if (!fileContentDetect.equals(MimeTypes.OCTET_STREAM)) {
return fileContentDetect;
}
// Try file name only if content search was not successful
String fileNameDetect = tika.detect(path.toString());
if (!fileNameDetect.equals(MimeTypes.OCTET_STREAM)) {
return fileNameDetect;
}
return null;
}
public static void main(String[] args) throws IOException {
Tika tika = new Tika();
if (args.length != 1) {
printUsage();
return;
}
Path path = Paths.get(args[0]);
TikaFileTypeDetector detector = new TikaFileTypeDetector();
String contentType = detector.probeContentType(path);
System.out.println("File is of type - " + contentType);
}
public static void printUsage() {
System.out.print("Usage: java -classpath ... "
+ TikaFileTypeDetector.class.getName()
+ " ");
}
}
从docs我创建了一个自定义xml:
<?xml version="1.0" encoding="UTF-8"?>
<mime-info>
<mime-type type="text/properties">
<glob pattern="*.properties"/>
</mime-type>
</mime-info>
现在我如何添加到我的程序并阅读它。我是否必须创建解析器?我被困在这里。
答案 0 :(得分:4)
在您的resources
文件夹中,添加包org\apache\tika\mime
并创建文件custom-mimetypes.xml
。
输入以下代码
<?xml version="1.0" encoding="UTF-8"?>
<mime-info>
<mime-type type="custom-mime-type">
<glob pattern="*.custom-extension"/>
</mime-type>
</mime-info>
将custom-mime-type
替换为您的哑剧类型,并将custom-extension
替换为您的扩展名。
请检查下面的目录结构。
此外,您还可以通过下载该文件并将其放置在custom-mimetypes.xml
旁边来本地加载tike mime-types。仅当您需要更改标准的tike mime类型时,这才有用。要记住的一件事是,两个xml中的mime类型/扩展名不能相同。
答案 1 :(得分:2)
Apache Tika 5 minute parser instructions中介绍了这一点。要添加对Java .properties文件的支持,您应首先创建一个名为custom-mimetypes.xml
的文件,并使用以下内容填充它:
<?xml version="1.0" encoding="UTF-8"?>
<mime-info>
<mime-type type="text/properties">
<_comment>Java Properties</_comment>
<glob pattern="*.properties"/>
<sub-class-of type="text/plain"/>
</mime-type>
</mime-info>
接下来,你需要把它放在Tika可以找到的地方,并且名字正确。 必须在您的类路径中存储为org/apache/tika/mime/custom-mimetypes.xml
。最简单的方法是创建该目录结构,移动新文件,然后将根目录添加到类路径中。对于部署,您应该将其包装到jar中并将其放在类路径
如果您需要小心,可以使用Tika App检查您的mime类型文件是否已加载。将您的代码作为jar封装,运行如下:
java -classpath tika-app-1.10-SNAPSHOT.jar:my-custom-mimetypes.jar org.apache.tika.cli.TikaCLI --list-supported-types | grep text/properties
或者,如果您将它放在本地目录中,请尝试类似
的内容ls -l org/apache/tika/mime/custom-mimetypes.xml
# Check a file was found, with some content in it
java -classpath tika-app-1.10-SNAPSHOT.jar:. org.apache.tika.cli.TikaCLI --list-supported-types | grep text/properties
如果没有显示你的mime类型,那么你没有得到正确的路径或文件名,请仔细检查它们
(或者,升级到更新版本的Apache Tika,因为自r1686315 Tika内置了Java Properties mimetype!)
答案 2 :(得分:1)
Tika将通过Java资源加载检测您的自定义定义,并自动将其添加到自己的定义中:为此,您需要将其命名为custom-mimetypes.xml并将其放入代码库中的org.apache.tika.mime包中。
如果从类创建jar文件,还需要在jar中包含custom-mimetypes.xml。
答案 3 :(得分:-2)
MediaType mediaType = detector.detect(stream, metadata);
System.out.println("Detected Media Type: " + mediaType.toString());
MimeType mimeType = config.getMimeRepository().forName(mediaType.toString());
String extension = mimeType.getExtension();