Il existe un fichier en ligne (tel que http://www.example.com/information.asp
) J'ai besoin de saisir et de sauvegarder dans un répertoire. Je sais qu'il existe plusieurs méthodes pour saisir et lire des fichiers en ligne (URL) ligne par ligne, mais existe-t-il un moyen de simplement télécharger et enregistrer le fichier en utilisant Java ?
Réponses
Trop de publicités?Essayez de Java NIO :
URL website = new URL("http://www.website.com/information.asp");
ReadableByteChannel rbc = Channels.newChannel(website.openStream());
FileOutputStream fos = new FileOutputStream("information.html");
fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
Utilisation de transferFrom()
est potentiellement beaucoup plus efficace qu'une simple boucle qui lit depuis le canal source et écrit dans ce canal. De nombreux systèmes d'exploitation peuvent transférer des octets directement du canal source dans le cache du système de fichiers sans les copier réellement.
En savoir plus ici .
Note : Le troisième paramètre de transferFrom est le nombre maximum d'octets à transférer. Integer.Max_VALUE transférera au maximum 2^31 octets, Long.MAX_VALUE permettra au maximum 2^63 octets (plus grand que tout fichier existant).
public void saveUrl(final String filename, final String urlString)
throws MalformedURLException, IOException {
BufferedInputStream in = null;
FileOutputStream fout = null;
try {
in = new BufferedInputStream(new URL(urlString).openStream());
fout = new FileOutputStream(filename);
final byte data[] = new byte[1024];
int count;
while ((count = in.read(data, 0, 1024)) != -1) {
fout.write(data, 0, count);
}
} finally {
if (in != null) {
in.close();
}
if (fout != null) {
fout.close();
}
}
}
Vous devrez gérer les exceptions, probablement en dehors de cette méthode.
Le téléchargement d'un fichier exige que vous le lisiez. Dans les deux cas, vous devrez parcourir le fichier d'une manière ou d'une autre. Au lieu de le lire ligne par ligne, vous pouvez simplement le lire par octets à partir du flux :
BufferedInputStream in = new BufferedInputStream(new URL("http://www.website.com/information.asp").openStream())
byte data[] = new byte[1024];
int count;
while((count = in.read(data,0,1024)) != -1)
{
out.write(data, 0, count);
}