如何将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中使用。 我在这里解释了同样的问题。