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

时间:2012-06-27 10:12:57

标签: java arrays bytebuffer 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;     
}

5 个答案:

答案 0 :(得分:34)

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

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

答案 1 :(得分:15)

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

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

  1. 将整个文件读入byte[]; Java版本> = 7包含convenience method called readAllBytes来读取文件中的所有数据;
  2. 在文件内容周围创建一个ByteArrayInputStream,现在已在内存中。
  3. 请注意,对于非常大的文件,这可能不是最佳解决方案 - 所有文件都将在同一时间点存储在内存中。使用正确的工作流非常重要。

答案 2 :(得分:5)

ByteArrayInputStream是一个围绕字节数组的InputStream包装器。这意味着您必须将文件完全读入byte[],然后使用其中一个ByteArrayInputStream构造函数。

您能否提供有关ByteArrayInputStream所做事情的更多详情?它可能有更好的方法来解决你想要实现的目标。

修改
如果您使用Apache FTPClient上传,则只需InputStream。你可以这样做;

String remote = "whatever";
InputStream is = new FileInputStream(new File("your file"));
ftpClient.storeFile(remote, is);

当然,您应该记得在完成后关闭输入流。

答案 3 :(得分:3)

这不是您要求的,但是以字节为单位读取文件的快速方法。

File file = new File(yourFileName);
RandomAccessFile ra = new RandomAccessFile(yourFileName, "rw"):
byte[] b = new byte[(int)file.length()];
try {
    ra.read(b);
} catch(Exception e) {
    e.printStackTrace();
}

//Then iterate through b

答案 4 :(得分:3)