如何将输入流转换为文件输入流

2022-08-31 14:02:08

我的程序中有这样一行:

InputStream Resource_InputStream=this.getClass().getClassLoader().getResourceAsStream("Resource_Name");

但是我怎样才能从中获取FileInputStream [Resource_InputStream]?


答案 1

如果 ClassLoader#getResource() 的 URI 表示有效的本地磁盘文件系统路径,请改用 ClassLoader#getResource()。

URL resource = classLoader.getResource("resource.ext");
File file = new File(resource.toURI());
FileInputStream input = new FileInputStream(file);
// ...

如果没有(例如.JAR),那么你最好的办法是将其复制到临时文件中。

Path temp = Files.createTempFile("resource-", ".ext");
Files.copy(classLoader.getResourceAsStream("resource.ext"), temp, StandardCopyOption.REPLACE_EXISTING);
FileInputStream input = new FileInputStream(temp.toFile());
// ...

也就是说,我真的看不到这样做的任何好处,或者它必须由一个糟糕的帮助器类/方法要求,它需要而不是.如果可以的话,只需修复 API 以请求一个。如果是第三方的,请务必将其报告为错误。在这种特定情况下,我还会在该API的其余部分周围放置问号。FileInputStreamInputStreamInputStream


答案 2

长话短说:不要使用FileInputStream作为参数或变量类型。使用抽象基类,在本例中为 InputStream。