我有一个文件,可以是任何东西像ZIP,RAR,txt,CSV,文件等。我想创建一个ByteArrayInputStream从它。
我正在使用它通过FTPClient从Apache Commons Net上传一个文件到FTP。
有人知道怎么做吗?
例如:
String data = "hdfhdfhdfhd";
ByteArrayInputStream in = new ByteArrayInputStream(data.getBytes());
我的代码:
public static ByteArrayInputStream retrieveByteArrayInputStream(File file) {
ByteArrayInputStream in;
return in;
}
发布于 2012-06-27 18:18:08
使用Apache Commons IO中的FileUtils#readFileToByteArray(File)
,然后使用ByteArrayInputStream(byte[])
构造函数创建ByteArrayInputStream
。
public static ByteArrayInputStream retrieveByteArrayInputStream(File file) {
return new ByteArrayInputStream(FileUtils.readFileToByteArray(file));
}
发布于 2012-06-27 18:19:57
一般的想法是,文件会产生一个FileInputStream
,而byte[]
会产生一个ByteArrayInputStream
。两者都实现了InputStream
,因此它们应该与任何使用InputStream
作为参数的方法兼容。
当然,可以将所有文件内容放入ByteArrayInputStream
中:
byte[]
中;Java版本>= 7包含从文件中读取所有数据的convenience method called readAllBytes
;ByteArrayInputStream
,该内容现在位于内存中。请注意,对于非常大的文件,这可能不是最佳解决方案-所有文件都将在同一时间点存储在内存中。为工作使用正确的流是很重要的。
发布于 2012-06-27 18:21:38
ByteArrayInputStream
是一个围绕字节数组的InputStream
包装器。这意味着您必须将文件完全读取到byte[]
中,然后使用其中一个ByteArrayInputStream
构造函数。
你能提供更多关于你正在用ByteArrayInputStream
做什么的细节吗?很可能有更好的方法来实现你想要实现的目标。
编辑:
如果你正在使用Apache FTPClient上传,你只需要一个InputStream
。你可以做到这一点;
String remote = "whatever";
InputStream is = new FileInputStream(new File("your file"));
ftpClient.storeFile(remote, is);
当然,您应该记得在使用完输入流之后关闭它。
https://stackoverflow.com/questions/11223868
复制相似问题