我正在尝试将项目中的资源复制到磁盘上的另一个位置。到目前为止,我有以下代码:
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及更高版本有效。