Как создать ByteArrayInputStream из файла в Java?
У меня есть файл, который может быть любым, например, ZIP, RAR, txt, CSV, doc и т.д. Я бы хотел создать из него ByteArrayInputStream.
Я использую его для загрузки файла на FTP через FTPClient из Apache Commons Net.
Кто-нибудь знает, как это сделать?
Например:
String data = "hdfhdfhdfhd";
ByteArrayInputStream in = new ByteArrayInputStream(data.getBytes());
Мой код:
public static ByteArrayInputStream retrieveByteArrayInputStream(File file) {
ByteArrayInputStream in;
return in;
}
Ответы
Ответ 1
Используйте FileUtils#readFileToByteArray(File)
из Apache Commons IO, а затем создайте ByteArrayInputStream
с помощью конструктора ByteArrayInputStream(byte[])
.
public static ByteArrayInputStream retrieveByteArrayInputStream(File file) {
return new ByteArrayInputStream(FileUtils.readFileToByteArray(file));
}
Ответ 2
Общая идея заключается в том, что файл даст FileInputStream
и byte[]
a ByteArrayInputStream
. Оба реализуют InputStream
, поэтому они должны быть совместимы с любым методом, который использует InputStream
в качестве параметра.
Поместить все содержимое файла в ByteArrayInputStream
, конечно, можно:
- читать полный файл в
byte[]
; Версия Java> = 7 содержит удобный метод под названием readAllBytes
для чтения всех данных из файла;
- создайте
ByteArrayInputStream
вокруг содержимого файла, которое сейчас находится в памяти.
Обратите внимание, что это не может быть оптимальным решением для очень больших файлов - все файлы будут храниться в памяти в один и тот же момент времени. Использование правильного потока для работы важно.
Ответ 3
A ByteArrayInputStream
является оберткой InputStream
вокруг массива байтов. Это означает, что вам нужно полностью прочитать файл в byte[]
, а затем использовать один из конструкторов ByteArrayInputStream
.
Можете ли вы дать более подробную информацию о том, что вы делаете с ByteArrayInputStream
? Вероятно, есть более эффективные способы достижения того, чего вы пытаетесь достичь.
Edit:
Если вы используете Apache FTPClient для загрузки, вам просто нужно InputStream
. Вы можете сделать это:
String remote = "whatever";
InputStream is = new FileInputStream(new File("your file"));
ftpClient.storeFile(remote, is);
Вы должны, конечно, не забудьте закрыть входной поток, как только закончите с ним.
Ответ 4
Это не совсем то, что вы просите, но это быстрый способ чтения файлов в байтах.
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
Ответ 5
Этот кусок кода удобен:
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;
}
Ссылка: http://howtodoinjava.com/2014/11/04/how-to-read-file-content-into-byte-array-in-java/