我有一个文件,可以是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;
}
答案 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)
一般的想法是,文件会产生FileInputStream
和byte[]
个ByteArrayInputStream
。两者都实现InputStream
,因此它们应该与使用InputStream
作为参数的任何方法兼容。
将所有文件内容放在ByteArrayInputStream
中当然可以完成:
byte[]
; Java版本> = 7包含convenience method called readAllBytes
来读取文件中的所有数据; ByteArrayInputStream
,现在已在内存中。请注意,对于非常大的文件,这可能不是最佳解决方案 - 所有文件都将在同一时间点存储在内存中。使用正确的工作流非常重要。
答案 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)
这段代码很方便:
spawn: false
参考:http://howtodoinjava.com/2014/11/04/how-to-read-file-content-into-byte-array-in-java/