当前位置: 首页 > 知识库问答 >
问题:

将自定义检测器类添加到apache tika

邵祺
2023-03-14
public class CustomDetector implements Detector {

public MediaType detect(InputStream stream, Metadata metadata) throws IOException {
    MediaType type = MediaType.OCTET_STREAM;

    InputStream lookahead = new LookaheadInputStream(stream, 1024);
    try {
        //Detect File Type
        File file = new File("ToolConfig.properties");
        Tika tika = new Tika();
        String filetype = tika.detect(file);

        //Read File content
        Properties properties = new Properties();
        properties.load(new FileInputStream("ToolConfig.properties"));
        for (String key : properties.stringPropertyNames()) {
            String value = properties.getProperty(key);
            if (key instanceof String && value instanceof String && filetype.contains("text/plain")) {
                type = MediaType.application("properties");
            }
        }

    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        lookahead.close();
    }
    return type;
    }
}

使用我想检测的tika。属性文件为属性文件(文本/属性)基于属性文件中的键和值格式,其他为文本文件(文本/普通)

上面我写了一个自定义类,它实现了tika的Detector接口,还为mime类型创建了一个自定义文件:

<mime-info>
<mime-type type="text/properties">
<glob pattern="*.properties"/>
</mime-type>
</mime-info>

将上述自定义类与META-INF/services/org一起添加到jar文件中。阿帕奇。蒂卡。发现探测器文件,但当我运行程序时,它会打印一个。属性文件为文本/普通,但不是文本/属性文件

我不确定哪里出了问题,也没有太多关于添加自定义mime或自定义tika的现有解析器的信息。

共有1个答案

令狐珂
2023-03-14

您的XML似乎以(一些)空格开头,请尝试删除XML开头的空格,如下所示:

<mime-info>
    <mime-type type="text/properties">
        <glob pattern="*.properties"/>
    </mime-type>
</mime-info>

我希望您在文件的第一行添加一个XML声明,然后在下一行继续执行我上面提到的说明,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<mime-info>
    <mime-type type="text/properties">
        <glob pattern="*.properties"/>
    </mime-type>
</mime-info>

我希望这有帮助。

 类似资料:
  • 我已经搜索了又搜索,除了我称之为“hack方法”的方法之外,找不到其他方法将自定义分类添加到自定义管理菜单中。 然后我注册我的帖子类型并确保它们使用 这可以工作,自定义帖子类型显示在我的自定义菜单中。 但是自定义分类法不接受同一属性的字符串,只接受true或false。 因此,要添加它,您必须创建一个子菜单页 这是一种“黑客”方式。 还有别的办法吗?如果不修改WordPress核心,我可以覆盖re

  • 我试图修改几个类的字节代码,这些类的打包jar文件不在类路径中-它们是在给定URL的运行时由自定义的加载的。我尝试使用和来拦截那些类,但失败了。类加载器是遗留项目的一部分,因此我无法直接对其进行更改。 代理可以很好地处理AppClassLoader“本地”加载的类,但只会忽略那些由自定义类加载器加载的类。 CustomClassLoader: 我的代理中使用的ClassFileTransforme

  • 问题内容: 我已经构建了自己的自定义react-bootstrap Popover组件: 该组件的呈现方式如下: 现在,我想向组件中添加自定义道具,例如:我的文字,并使用新道具在弹出框中设置一些内容,例如- 但随后我在浏览器中收到此警告: 警告:标签上的未知道具。从元素中删除这些道具。 现在,我想我可以删除零件并逐个插入所有原始道具,而无需自定义道具,但是这样我就失去了“淡入淡出”效果,这也是处理

  • 我有一个从sqlite数据库接收阵列的基本适配器: 并在异步中填充它: 但我不知道如何为每个条目添加图像,请注意,图像位于文件夹中,图像的名称属于每个条目,例如对于条目管理,在/storage/sdcard/pictures/admin_image1中有一个图像。jpg。因此,当我有条目的名称时,我可以将图像绑定到特定条目。 我需要的是如何将图像添加到此适配器,这里我发布了主要活动和适配器代码,抱

  • 问题内容: 我正在研究启用AJAX的asp.net应用程序。我刚刚向Array.prototype添加了一些方法,例如 该解决方案对我有用,可以以“漂亮”的方式重用代码。 但是,当我测试了它与整个页面一起使用时,我遇到了问题。我们有了一些自定义的Ajax扩展程序,它们开始表现出意想不到的效果:某些控件在其内容或值上显示为“未定义”。 这可能是什么原因?我是否缺少修改标准对象原型的东西? 注意:我很

  • 如果我创建一个继承JComponent的新类,我重写了JComponent的绘图Component(Graphics g)方法,通过使用g绘制一个圆圈,我应该修改什么才能使MouseListener仅在我单击组件的边界内时触发? 因为我在组件的构造函数中添加了setBounds(…)然后添加了一个MouseListener,但它会在我每次单击自定义组件所在容器中的任何位置时触发,而不仅仅是在我单击