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;     
}
21
demandé sur Felix Bohnacker 2012-06-27 14:12:56

5 réponses

FileUtils#readFileToByteArray(File) Apache Commons IO, et ensuite créer le ByteArrayInputStreamByteArrayInputStream(byte[]) constructeur.

public static ByteArrayInputStream reteriveByteArrayInputStream(File file) {
    return new ByteArrayInputStream(FileUtils.readFileToByteArray(file));
}
30
répondu npe 2015-06-04 21:15:31

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:

  1. lu dans le fichier complet dans un byte[]; version de Java >= 7 contient un méthode de commodité appelée readAllBytes pour lire toutes les données à partir d'un fichier;
  2. 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.

15
répondu Maarten Bodewes 2017-05-29 20:23:52

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.

5
répondu Qwerky 2012-06-27 11:44:50

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/

3
répondu Buddy 2015-09-01 03:16:41

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
3
répondu Sam Palmer 2015-11-16 09:57:51