Как создать ByteArrayInputStream из файла на Java?
у меня есть файл, который может быть любым, как ZIP, RAR, txt, CSV, doc и т. д. Я хотел бы создать ByteArrayInputStream от него.
Я использую его для загрузки файла на FTP через FTPClient из сети Apache Commons.
кто-нибудь знает, как это сделать?
например:
String data = "hdfhdfhdfhd";
ByteArrayInputStream in = new ByteArrayInputStream(data.getBytes());
мой код:
public static ByteArrayInputStream retrieveByteArrayInputStream(File file) {
ByteArrayInputStream in;
return in;
}
5 ответов
использовать FileUtils#readFileToByteArray(File) С Apache Commons IO, а затем создать ByteArrayInputStream С помощью ByteArrayInputStream(byte[]) конструктор.
public static ByteArrayInputStream reteriveByteArrayInputStream(File file) {
return new ByteArrayInputStream(FileUtils.readFileToByteArray(file));
}
общая идея заключается в том, что файл будет уступать FileInputStream и byte[] a ByteArrayInputStream. Оба реализуют InputStream поэтому они должны быть совместимы с любым методом, который использует InputStream в качестве параметра.
положить все содержимое файла в ByteArrayInputStream можно сделать конечно:
- читать в полном файле в
byte[]; версия Java >= 7 содержит удобный метод называетсяreadAllBytesдля чтения всех данных из файла; - создать
ByteArrayInputStreamвокруг содержимого файла, которое теперь находится в памяти.
обратите внимание, что это не может быть оптимальным решением для очень больших файлов - все файлы будут храниться в памяти в тот же момент времени. Важно использовать правильный поток для работы.
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);
вы, конечно, должны помнить, чтобы закрыть входной поток, как только вы закончите с ним.
этот кусок кода пригодится:
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/
Это не совсем то, что вы просите, но это быстрый способ чтения файлов в байтах.
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