J'ai un fichier qui peut être n'importe quoi comme Zip, RAR, txt, CSV, doc etc. Je voudrais en créer un ByteArrayInputStream .
Je l'utilise pour télécharger un fichier sur FTP via FTPClient depuis Apache Commons Net.
Quelqu'un sait-il comment le faire?
Par exemple:
String data = "hdfhdfhdfhd";
ByteArrayInputStream in = new ByteArrayInputStream(data.getBytes());
Mon code:
public static ByteArrayInputStream retrieveByteArrayInputStream(File file) {
ByteArrayInputStream in;
return in;
}
Utilisez le FileUtils#readFileToByteArray(File)
de Apache Commons IO , puis créez le ByteArrayInputStream
en utilisant le ByteArrayInputStream(byte[])
constructeur.
public static ByteArrayInputStream retrieveByteArrayInputStream(File file) {
return new ByteArrayInputStream(FileUtils.readFileToByteArray(file));
}
L'idée générale est qu'un fichier produirait un FileInputStream
et un byte[]
a ByteArrayInputStream
. Les deux implémentent InputStream
et doivent 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:
byte[]
; Java version> = 7 contient un méthode pratique appelée readAllBytes
pour lire toutes les données d'un fichier;ByteArrayInputStream
autour du contenu du fichier, qui est maintenant en mémoire.Notez que cela peut ne pas être la solution optimale pour les fichiers très volumineux - tout le fichier sera stocké en mémoire au même moment. Il est important d'utiliser le bon flux pour le travail.
Un ByteArrayInputStream
est un wrapper InputStream
autour d'un tableau d'octets. Cela signifie que vous devrez lire entièrement le fichier dans un byte[]
, puis utilisez l'un des constructeurs ByteArrayInputStream
.
Pouvez-vous donner plus de détails sur ce que vous faites avec le ByteArrayInputStream
? Il est probable qu'il existe de meilleures façons de réaliser ce que vous essayez de réaliser.
Modifier:
Si vous utilisez Apache FTPClient pour télécharger, vous avez juste besoin d'un InputStream
. Tu peux le faire;
String remote = "whatever";
InputStream is = new FileInputStream(new File("your file"));
ftpClient.storeFile(remote, is);
Vous devez bien sûr vous rappeler de fermer le flux d'entrée une fois que vous l'avez terminé.
Ce n'est pas exactement ce que vous demandez, mais c'est un moyen rapide de lire 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
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/