2011-03-18 352 views
3

我已阅读此文章How to convert InputStream to FileInputStream将InputStream转换为FileInputStream。但是,如果您使用的是jar文件中的资源,则答案不起作用。有没有另一种方式来做到这一点。将InputStream转换为FileInputStream

我需要这样做,以获得来自呼叫FileChannelObject.class.getResourceAsStream(resourceName);

+2

你为什么需要它?一般来说,可能没有这样的对象。 – 2011-03-18 16:36:44

+1

好吧,我会咬:为什么你需要FileChannel? – Pointy 2011-03-18 16:39:02

+0

有一个我正在尝试使用的复制功能。 – user489041 2011-03-18 17:00:10

回答

6

你不能,基本上没有写入文件。除非有文件,否则不能有FileInputStreamFileChannel。如果可能,请确保您的代码与输入源无关 - 根据InputStreamByteChannel(或任何类型的通道最合适)进行设计。

6

从Class.getResourceAsStream()返回的InputStream中,你可以做一个通道与Channels.newChannel(InputStream).

这是不是你所要求的FileChannel,但它仍然是一个通道。满足您的需求是否足够?

+0

有趣的,让我试试这个 – user489041 2011-03-18 17:01:17

0

如果您确实需要一个文件,并且您知道资源不在jar内或远程加载,那么您可以使用getResource代替。

URL resourceLocation = Object.class.getResource(resourcePath); 
if (resourceLocation == null) { throw new FileNotFoundException(resourcePath); } 
File myFile = new File(resourceLocation.toURI()); 

如果没有绝对需要一个FileChannel或不能使你的类路径是如何布局的假设,然后安迪·托马斯 - 克拉默的解决方案可能是最好的。

+0

感谢迈克,但我需要的资源将在JAR文件中。 – user489041 2011-03-18 17:11:28

+0

在这种情况下,如果不以某种方式将jar作为文件系统安装,就无法做到这一点。文件通道预设了一个文件。干杯 – 2011-03-18 18:59:28

相关问题