如何从Java中的文件创建ByteArrayInputStream?

我有一个文件,可以是任何东西,如ZIP,RAR,txt,CSV,doc等。我想从中创建一个ByteArrayInputStream
我正在使用它从Apache Commons Net通过FTPClient将文件上传到FTP。

有人知道如何做吗?

例如:

String data = "hdfhdfhdfhd";
ByteArrayInputStream in = new ByteArrayInputStream(data.getBytes());

我的代码:

public static ByteArrayInputStream retrieveByteArrayInputStream(File file) {
    ByteArrayInputStream in;

    return in;     
}

答案 1

使用 Apache Commons IO 中的 FileUtils#readFileToByteArray(File),然后使用 ByteArrayInputStream(byte[]) 构造函数创建。ByteArrayInputStream

public static ByteArrayInputStream retrieveByteArrayInputStream(File file) {
    return new ByteArrayInputStream(FileUtils.readFileToByteArray(file));
}

答案 2

一般的想法是,文件将产生 a 和 a 。两者都实现,因此它们应该与用作参数的任何方法兼容。FileInputStreambyte[]ByteArrayInputStreamInputStreamInputStream

当然,将所有文件内容放入 a 中可以完成:ByteArrayInputStream

  1. 将完整文件读入 ;Java版本>= 7包含一个名为readAllBytes的方便方法,用于读取文件中的所有数据;byte[]
  2. 在文件内容周围创建一个,该文件内容现在在内存中。ByteArrayInputStream

请注意,这可能不是非常大的文件的最佳解决方案 - 所有文件将在同一时间点存储在内存中。为作业使用正确的流非常重要。