7
votes

Écrire un fichier binaire téléchargé sur le disque en Java

J'ai un logiciel qui permet d'écrire un complément dans les fichiers JavaScript (.js) qui permettent d'utiliser la fonction Java (je ne sais pas si cela est courant, je n'ai jamais vu java appeler dans le fichier JavaScript avant)

Je dois télécharger un fichier binaire d'un serveur Web et l'écrire sur le disque dur. J'ai essayé le code suivant: xxx

Le fichier résultant n'est plus une archive GZIP valide. Je suis désolé si j'ai fait une énorme erreur mais je ne suis pas un programmeur et je ne connais pas trop Java.


0 commentaires

4 Réponses :


33
votes

N'utilisez pas de FileWriter code> - qui tente de convertir les données en texte.

Utilisez simplement FileOutPutStream code>. P>

byte[] buffer = new byte[8 * 1024];

InputStream input = urlConnect.getInputStream();
try {
  OutputStream output = new FileOutputStream(filename);
  try {
    int bytesRead;
    while ((bytesRead = input.read(buffer)) != -1) {
      output.write(buffer, 0, bytesRead);
    }
  } finally {
    output.close();
  }
} finally {
  input.close();
}


2 commentaires

De plus, vous voudrez utiliser la bonne condition de test dans votre boucle tandis que: tandis que ((((((données = est .read ())! = Null) {...}.


Merci d'utiliser des œuvres FileOutputTream (j'utilise toujours seulement une simple lecture () car il semble qu'il ne soit pas possible d'utiliser un tampon d'octet en JavaScript car ce n'est pas un objet.



2
votes

DataGuTream code> est destiné à lire les primitives Java, non pour les données génériques.

Il est également redondant, comme urlconnect.getinputStream (); code> renvoie déjà une intrigue, et Toutes les intrigions prises en charge Lecture (). P>

is = urlConnect.getInputStream();


1 commentaires

Nice information! Intéressant d'apprendre que malgré ce que la nommée suggère DataGuTretstre n'est pas pour les données génériques ..!



9
votes

Je sais que cette question est déjà répondu, mais une approche plus simple consiste à utiliser la méthode IOUTILS.COPY (CODE> IOUTILS.COPY () d'Apache Commons () , qui peut complètement copier un InputStream à un sortiestream .


0 commentaires

0
votes

Il suffit de lire sur LimitInputStrereStream comme il fait exactement ce que vous faites, tamponner le flux d'entrée pour une plus grande efficacité.


0 commentaires