29

我有一个文件,可以是 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;     
}
4

5 回答 5

52

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

public static ByteArrayInputStream retrieveByteArrayInputStream(File file) {
    return new ByteArrayInputStream(FileUtils.readFileToByteArray(file));
}
于 2012-06-27T10:18:07.653 回答
23

一般的想法是 File 会产生 aFileInputStream和 a byte[]a ByteArrayInputStream。两者都实现InputStream,因此它们应该与InputStream用作参数的任何方法兼容。

当然可以将所有文件内容放入 aByteArrayInputStream中:

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

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

于 2012-06-27T10:19:56.667 回答
5

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

你能提供更多关于你在做什么的细节ByteArrayInputStream吗?围绕您要实现的目标可能有更好的方法。

编辑:
如果您使用 Apache FTPClient 上传,您只需要一个InputStream. 你可以这样做;

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

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

于 2012-06-27T10:21:37.760 回答
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
于 2012-06-27T10:21:05.730 回答
3

This piece of code comes handy:

private static byte[] readContentIntoByteArray(File file)
{
  FileInputStream fileInputStream = null;
  byte[] bFile = new byte[(int) file.length()];
  try
  {
     //convert file into array of bytes
     fileInputStream = new FileInputStream(file);
     fileInputStream.read(bFile);
     fileInputStream.close();
  }
  catch (Exception e)
  {
     e.printStackTrace();
  }
  return bFile;
}

Reference: http://howtodoinjava.com/2014/11/04/how-to-read-file-content-into-byte-array-in-java/

于 2015-09-01T02:14:42.697 回答