【问题标题】:How to provide a classpath resource to a function accepting a File parameter? [duplicate]如何为接受 File 参数的函数提供类路径资源? [复制]
【发布时间】:2020-01-25 23:34:32
【问题描述】:

我正在使用提供以下功能的外部 API:

public void process(File file) {
}

就我而言,要提供的文件位于类路径中的 JAR 中。有没有办法将代表此文件的File 提供给process(File)

我尝试了以下方法:

new File(getClass().getClassLoader().getResource("my-file.txt").toURI()))

这给出了错误:URI is not hierarchical

我做了一些研究并了解到类路径上的文件不应被视为常规文件,而应被视为资源。这让我相信,没有简单的方法可以为该资源构造 File

我应该先将资源复制到临时文件吗?

【问题讨论】:

    标签: java classpath


    【解决方案1】:

    理想情况下,您应该修复已彻底损坏的 API。否则,获得File 的唯一可靠方法是复制到一个临时的。您可能需要使用 Files.createTempDirectory,然后使用 Apache Commons IO IOUtils 之类的东西来复制内容。

    【讨论】:

    • 非常感谢。所以这意味着我只能通过先创建副本来使用 API?
    • 如果这个 API 需要一个实际的 File 对象,那么可以。这正是为什么 process 方法应该使用 ReaderInputStream 代替。
    • 知道了!我会要求 API 维护人员添加这样的方法,同时我会通过在你所说的临时目录中创建一个临时文件来解决它。
    • 举个有用的例子,看看 Jackson 中可用的各种 readValue 签名:fasterxml.github.io/jackson-databind/javadoc/2.9/com/fasterxml/…
    • 如果 Guava 或其他一些库为此提供了方便的实用功能,那将会很有用:)。正如你所说,我可以使用 IOUtilis,但是我仍然必须创建目录,打开和关闭 OutputStream 等。也就是说,这比必须手动完成所有事情要好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-05
    • 2011-08-28
    • 2017-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-18
    相关资源
    最近更新 更多