Java 如何将InputStream转换为FileInputStream
我的程序中有一行:Java 如何将InputStream转换为FileInputStream,java,file-io,Java,File Io,我的程序中有一行: InputStream Resource_InputStream=this.getClass().getClassLoader().getResourceAsStream("Resource_Name"); 但是如何从它获取FileInputStream[Resource\u InputStream]?如果它的URI表示有效的本地磁盘文件系统路径,请改用 URL resource = classLoader.getResource("resource.ext"); File
InputStream Resource_InputStream=this.getClass().getClassLoader().getResourceAsStream("Resource_Name");
但是如何从它获取FileInputStream[Resource\u InputStream]?如果它的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
。如果它是第三方的,请务必将其报告为bug。在本例中,我还将在API的其余部分打上问号。长话短说:
不要将FileInputStream用作参数或变量类型。使用抽象基类,在本例中为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中工作,不能在runnable JAR中工作。我也解释了同样的问题。为什么需要FileInputStream?你确定有一个实际的文件支持你的资源,而不是JAR文件中的条目吗?我不喜欢这个答案,有时候你真的需要FileInputStream,因为你需要来自API的方法,比如getChannel(),他没有问使用InputStream是否是个好主意,只是问是否可以从输入流创建文件输入流。您可以使用注释而不是添加新答案。java.util.Properties呢?而不是
FileInputStream input=newfileinputstream(temp.toFile())代码>,我使用了FileInputStream input=newfileinputstream(temp.toString())代码>。因为temp.toFile
可能会留下一个空(FileInputStream)输入。出于可能的原因,您可以检查Path.toFile java api文档