如何让插件访问任何运行项目的资源文件夹中的文件

r6hnlfcb  于 2021-09-13  发布在  Java
关注(0)|答案(1)|浏览(497)

我已经创建了一个插件。它需要访问res文件夹中的2个文件。现在的诀窍是,res文件夹不在插件内。例如,我已经在本地发布了插件,所以它现在可以在“工具”菜单中的任何您创建的项目下看到。我想要的是,我创建的任何新项目,在res文件夹中都会有2个文件facility.json和groups.json,现在我的插件应该能够访问这些文件。我尝试了不同的方法,如下图所示,但总是失败,称为“未找到文件”异常。如果有人能帮我的话。谢谢。非常感谢。

private static File getFileFromResource(String fileName) throws URISyntaxException {

    ClassLoader classLoader = Validator.class.getClassLoader();
    URL resource = classLoader.getResource(fileName);
    if (resource == null) {
        throw new IllegalArgumentException("file not found! " + fileName);
    } else {

        // failed if files have whitespaces or special characters
        //return new File(resource.getFile());

        return new File(resource.toURI());
    }

}

private static InputStream getFileFromResourceAsStream(String fileName) {

    // The class loader that loaded the class
    ClassLoader classLoader = Validator.class.getClassLoader();
    InputStream inputStream = classLoader.getResourceAsStream(fileName);

    // the stream holding the file content
    if (inputStream == null) {
        throw new IllegalArgumentException("file not found! " + fileName);
    } else {
        return inputStream;
    }
}
fdx2calv

fdx2calv1#

这是最巧妙的部分,你没有。每次创建新项目时,您都必须自己添加它们,因为res文件夹不是插件,而是资源(假设您使用res作为资源)
通过手动添加每个facility.json和groups.json来尝试此操作

InputStream IS = getClass().getResourceAsStream("/res/file name");

InputStream IS = getClass().getResourceAsStream("root/dir/file name");

您的插件已在本地发布,因此添加地址可能会有所帮助
如果仍然没有,请尝试将res文件夹中只有facility.json&groups.json的干净项目保存为项目模板。这取决于你的ide,
intelij idea-jetbrain:https://www.jetbrains.com/help/idea/saving-project-as-template.html
netbeans ide-apache:https://netbeans.apache.org/tutorials/nbm-filetemplates.html
根据我的经验,我正在为新项目创建自己的netbeans模板

相关问题