【问题标题】:Convert InputStream into FileInputStream将 InputStream 转换为 FileInputStream
【发布时间】:2011-03-18 16:34:27
【问题描述】:

我已经阅读了这篇关于将 InputStream 转换为 FileInputStream 的帖子 How to convert InputStream to FileInputStream。但是,如果您使用的是 jar 文件中的资源,则答案不起作用。有没有别的办法。

我需要这样做才能从调用中获取FileChannel Object.class.getResourceAsStream(resourceName);

【问题讨论】:

  • 为什么需要它?一般来说,可能没有这样的对象。
  • 好吧,我咬一口:你为什么需要 FileChannel ?
  • 我正在尝试使用复制功能。
  • 请注意,除了 FileChannel.transferTo()——它要求源是一个 FileChannel——还有 FileChannel.transferFrom(),它要求目标是这样。

标签: java iostream


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    从Class.getResourceAsStream()返回的InputStream中,你可以用Channels.newChannel( InputStream ).创建一个Channel

    这不是您请求的 FileChannel,但它仍然是一个 Channel。是否足以满足您的需求?

    【讨论】:

    • 有意思,我试试这个
    【解决方案3】:

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

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

    如果您不是绝对需要FileChannel 或者无法对类路径的布局方式做出假设,那么 Andy Thomas-Cramer 的解决方案可能是最好的。

    【讨论】:

    • 谢谢 Mike,但我需要的资源将在 JAR 文件中。
    • 在这种情况下,如果不以某种方式将 jar 挂载为文件系统,就无法做到这一点。文件通道以文件为前提。干杯
    猜你喜欢
    • 2011-08-11
    • 1970-01-01
    • 1970-01-01
    • 2013-09-18
    • 2014-04-23
    • 2011-07-09
    • 2018-07-19
    • 1970-01-01
    • 2013-07-09
    相关资源
    最近更新 更多