Télécharger le fichier en utilisant java apache commons?
Comment puis-je utiliser la bibliothèque pour télécharger un fichier et imprimer des octets sauvé? J'ai essayé d'utiliser
import static org.apache.commons.io.FileUtils.copyURLToFile;
public static void Download() {
URL dl = null;
File fl = null;
try {
fl = new File(System.getProperty("user.home").replace("\\", "/") + "/Desktop/Screenshots.zip");
dl = new URL("http://ds-forums.com/kyle-tests/uploads/Screenshots.zip");
copyURLToFile(dl, fl);
} catch (Exception e) {
System.out.println(e);
}
}
mais je ne peut pas afficher les octets ou une barre de progression. Quelle méthode dois-je utiliser?
public class download {
public static void Download() {
URL dl = null;
File fl = null;
String x = null;
try {
fl = new File(System.getProperty("user.home").replace("\\", "/") + "/Desktop/Screenshots.zip");
dl = new URL("http://ds-forums.com/kyle-tests/uploads/Screenshots.zip");
OutputStream os = new FileOutputStream(fl);
InputStream is = dl.openStream();
CountingOutputStream count = new CountingOutputStream(os);
dl.openConnection().getHeaderField("Content-Length");
IOUtils.copy(is, os);//begin transfer
os.close();//close streams
is.close();//^
} catch (Exception e) {
System.out.println(e);
}
}
source d'informationauteur Kyle
Vous devez vous connecter pour publier un commentaire.
Si vous êtes à la recherche d'un moyen d'obtenir le nombre total d'octets avant de télécharger, vous pouvez obtenir cette valeur à partir de la
Content-Length
en-tête de réponse http.Si vous voulez juste le nombre final d'octets après le téléchargement, il est plus facile de vérifier la taille du fichier que vous venez d'écrire.
Toutefois, si vous souhaitez afficher la progression actuelle de combien d'octets ont été téléchargés, vous pourrez étendre apache
CountingOutputStream
pour envelopper leFileOutputStream
de sorte que chaque fois que lewrite
méthodes sont appelées elle compte le nombre d'octets de passage et de mettre à jour la barre de progression.Mise à jour
Ici est une simple mise en œuvre de
DownloadCountingOutputStream
. Je ne suis pas sûr si vous êtes familiarisé avec l'utilisationActionListener
ou pas, mais il est utile de classe pour la mise en œuvre de l'interface graphique.C'est l'utilisation de l'échantillon :
commons-io a
IOUtils.copier(inputStream, outputStream)
. Donc:Et
IOUtils.toByteArray(is)
peut être utilisé pour obtenir les octets.Obtenir le nombre total d'octets est une autre histoire. Les ruisseaux ne pas vous donner de total, ils ne peuvent vous donner ce qui est actuellement disponible dans le flux. Mais comme c'est un cours d'eau, il peut avoir plus à venir.
C'est pourquoi http a sa manière particulière de en précisant le nombre total d'octets. C'est dans l'en-tête de réponse
Content-Length
. Donc, si vous voulez appelerurl.openConnection()
et ensuite appelergetHeaderField("Content-Length")
sur leURLConnection
objet. Elle retourne le nombre d'octets sous forme de chaîne de caractères. Ensuite, utilisezInteger.parseInt(bytesString)
et vous aurez votre total.