我正在尝试将项目中的资源复制到磁盘上的另一个位置。到目前为止,我有以下代码:

if (!file.exists()){
    try {
        file.createNewFile();
        Files.copy(new InputSupplier<InputStream>() {
            public InputStream getInput() throws IOException {
                return Main.class.getResourceAsStream("/" + name);
            }
        }, file);
    } catch (IOException e) {
        file = null;
        return null;
    }
}

它可以正常工作,但是不推荐使用InputSupplier类,因此我想知道是否有更好的方法来完成我要尝试的操作。

最佳答案

请参阅Guava InputSupplier class的文档:

对于InputSupplier<? extends InputStream>,请改为使用 ByteSource 。对于InputSupplier<? extends Reader>,请使用 CharSource 。不属于这些类别之一的InputSupplier实现无法从common.io中的任何方法中受益,而应使用其他接口。该界面计划于2015年12月删除。

因此,在您的情况下,您正在寻找ByteSource:

Resources.asByteSource(url).copyTo(Files.asByteSink(file));

有关更多信息,请参见Guava Wiki的this section

如果您正在寻找纯Java(无外部库)版本,则可以执行以下操作:
try (InputStream is = this.getClass().getClassLoader().getResourceAsStream("/" + name)) {
    Files.copy(is, Paths.get("C:\\some\\file.txt"));
} catch (IOException e) {
    // An error occurred copying the resource
}

请注意,这仅对Java 7及更高版本有效。

09-27 05:26