java - 如何将 InputStream 转换为 FileInputStream

标签 java file-io

我的程序中有这一行:

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

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

最佳答案

使用 ClassLoader#getResource()相反,如果它的 URI 代表一个有效的本地磁盘文件系统路径。

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());
// ...

也就是说,我真的看不出这样做有什么好处,或者它必须是一个需要 FileInputStream 而不是 InputStream 的可怜的帮助类/方法所需要的.如果可以,只需修复 API 以请求 InputStream 代替。如果是第 3 方,请务必将其报告为错误。在这种特定情况下,我还会在该 API 的其余部分加上问号。

关于java - 如何将 InputStream 转换为 FileInputStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2353057/

相关文章:

.net - .net 何时会原生支持长路径?

java - 在 while 循环内重复错误消息

java - swagger ui 无法通过 micronaut 多模块项目 gradle build 访问

java - Android - ConcurrentModificationException - 在不同的线程中读取和删除

c++ - Binary/Int 文件读取 & 数组存储

java - 将base64编码的pdf转换为文件输入流,而不将文件写入系统

python - python中的文件指针

java - 执行超时后返回的长时间计算

java - libgdx v0.9.9 中的 opengl API Gdx.gl20 与 Gdx.gl

c++ - 如何从 C++ 中的流执行快速格式化输入?