如何将InputStream转换为FileInputStream

我在我的程序中有这个行:

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

但是我怎么能从它[Resource_InputStream]获得FileInputStream?

如果其URI表示有效的本地磁盘文件系统path,则使用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()); // ... 

也就是说,我真的没有看到这样做的好处,或者它必须由需要FileInputStream而不是InputStream的可怜的帮助程序类/方法来实现。 如果可以的话,只需修改API即可请求InputStream 。 如果它是第三方的,则通过一切手段报告它是一个错误。 在这个特定情况下,我还会在该API的其余部分添加问号。

长话短说: 不要使用FileInputStream作为参数或variablestypes。 使用抽象基类,而不是InputStream。

你需要像这样的东西:

  URL resource = this.getClass().getResource("/path/to/resource.res"); File is = null; try { is = new File(resource.toURI()); } catch (URISyntaxException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } try { FileInputStream input = new FileInputStream(is); } catch (FileNotFoundException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } 

但是它只能在你的IDE中工作,而不能在可运行的JAR中使用。 我在这里解释了同样的问题。