Comment créer ByteArrayInputStream à partir d'un fichier Java?
j'ai un fichier qui peut être N'importe quelle chose comme ZIP, RAR, txt, CSV, doc etc. Je voudrais créer un ByteArrayInputStream.
Je l'utilise pour télécharger un fichier vers FTP via FTPClient à partir de Apache Commons Net.
quelqu'un sait comment faire?
Par exemple:
String data = "hdfhdfhdfhd";
ByteArrayInputStream in = new ByteArrayInputStream(data.getBytes());
mon code:
public static ByteArrayInputStream retrieveByteArrayInputStream(File file) {
ByteArrayInputStream in;
return in;
}
5 réponses
FileUtils#readFileToByteArray(File)
Apache Commons IO, et ensuite créer le ByteArrayInputStream
ByteArrayInputStream(byte[])
constructeur.
public static ByteArrayInputStream reteriveByteArrayInputStream(File file) {
return new ByteArrayInputStream(FileUtils.readFileToByteArray(file));
}
L'idée générale est qu'un Fichier donnerait un FileInputStream
et byte[]
ByteArrayInputStream
. Les deux implémentent InputStream
ils devraient donc être compatibles avec toute méthode qui utilise InputStream
comme paramètre.
mettre tout le contenu du fichier dans un ByteArrayInputStream
peut être fait, bien sûr:
- lu dans le fichier complet dans un
byte[]
; version de Java >= 7 contient un méthode de commodité appeléereadAllBytes
pour lire toutes les données à partir d'un fichier; - créer un
ByteArrayInputStream
autour du contenu du fichier, qui est maintenant en mémoire.
notez que ce n'est peut - être pas la solution optimale pour les très gros fichiers-tous les fichiers seront stockés en mémoire au même moment. Utiliser le bon flux pour le travail est important.
ByteArrayInputStream
est un InputStream
wrapper autour d'un tableau d'octets. Cela signifie que vous devrez lire entièrement le fichier dans un byte[]
, puis utilisez l'une des ByteArrayInputStream
constructeurs.
Pouvez-vous donner plus de détails de ce que vous faites avec l' ByteArrayInputStream
? Il est probable qu'il existe de meilleurs moyens de contourner ce que vous tentez de réaliser.
Edit:
Si vous utilisez Apache FTPClient pour télécharger, vous avez juste besoin d'un InputStream
. Vous pouvez le faire c';
String remote = "whatever";
InputStream is = new FileInputStream(new File("your file"));
ftpClient.storeFile(remote, is);
vous devriez bien sûr vous rappeler de fermer le flux d'entrée une fois que vous en avez terminé avec lui.
ce morceau de code est pratique:
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;
}
référence: http://howtodoinjava.com/2014/11/04/how-to-read-file-content-into-byte-array-in-java/
Ce n'est pas exactement ce que vous demandez, mais est un moyen rapide de lecture des fichiers en octets.
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