【问题标题】:Construct a java.io.File that reads from a byte array构造一个从字节数组中读取的 java.io.File
【发布时间】:2012-06-11 14:43:20
【问题描述】:

我正在使用一个需要 java.io.File 作为输入的 API,但我只想向 API 发送一个字节数组。有没有办法创建一个从我的字节数组而不是磁盘读取的 File 对象?

【问题讨论】:

  • Creating a File from byte array 的可能重复项
  • @JoachimSauer 不是真的,因为链接的问题询问是否可以在不写入磁盘(某种虚拟文件左右)的情况下写入文件,而这个问题只是询问如何写入一个文件。
  • @brimborium:问题在我看来几乎相同:他们需要 java.io.File,因为某些第三方 API 需要它,但他们有 字节数组/流,并且不想将其持久化到磁盘(这将是直接但低效的解决方案)。而且,答案是一样的:不,做不到。
  • @JoachimSauer 好的,我明白你的意思了。

标签: java


【解决方案1】:

File 不读取任何内容。它表示操作系统中的文件(或目录)对象(或虚拟文件等)。要从中读取,您必须创建 Readers 或 Streams,API 将自行完成。如果 API 没有提供传入 Reader 或 InputStream 的方法,那你就倒霉了。

【讨论】:

    【解决方案2】:

    您可以打开一个临时文件:open temp file in java

    然后,如果将您的 byte[] 并通过一些 OutputStream/Writer 将其全部写入临时文件,您应该拥有您需要的东西。然后你可以传递文件而不在磁盘上创建它。

    【讨论】:

      【解决方案3】:

      Java 使用InputStream(或OutpusStream)方法。使用java.io.File 已经强制执行太多了,那么File 类不是您可以读取或写入的任何东西:它只是代表文件系统中的一个条目(然后您可以从中获取其相关联的条目)输入和输出流)。

      所以你应该有一个接受泛型InputStream 的方法。如果 API 只支持 File 对象,那么它显然设计不佳(或者您正试图以不允许的方式使用它们)。

      【讨论】:

        【解决方案4】:
        String strFilePath = "filePath";
        byte[] writeBytes = ...;
        try {
          FileOutputStream fos = new FileOutputStream(strFilePath);
          fos.write(byteArray);
          fos.close();
        } catch(FileNotFoundException ex) {
          // handle FileNotFoundException here
        } catch(IOException ioe) {
          // handle IOException here
        }
        

        编辑:通常我不喜欢只提供代码,但是整个流媒体的东西曾经让我很困惑,所以这里有一个解决方案;)。

        EDIT2:好的,我刚刚意识到,这正是 OP 不想做的事情。所以这个答案并不是很有用......

        【讨论】:

        • 请不要使用System.out.println() 作为您的异常处理。甚至在示例代码中也没有。 尤其是不在示例代码中。这经常被复制到生产代码中,甚至不再有趣。
        • @JoachimSauer 你完全正确。糟糕的bribborium。改变了它。 ;)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-08
        • 1970-01-01
        相关资源
        最近更新 更多