001 package com.blogspot.pilloledijava.download;
002
003 import java.io.BufferedInputStream;
004 import java.io.BufferedOutputStream;
005 import java.io.File;
006 import java.io.FileOutputStream;
007 import java.io.IOException;
008 import java.io.InputStream;
009 import java.io.OutputStream;
010 import java.net.URL;
011
012 /**
013 * Classe che implementa due metodi per scaricare la risorsa identificata da un
014 * URL su un outputstream o su un file
015 *
016 * @author pdj
017 *
018 */
019 public class Downloader {
020
021 /**
022 * Metodo che scrive su un java.io.OutputStream la risorsa identificata da
023 * un URL
024 *
025 * @param url
026 * URL da scaricare
027 * @param outputStream
028 * outputstream di destinazione
029 * @param bufferSize
030 * numero di byte letti ad ogni iterazione
031 * @throws IOException
032 * potrebbe essere causata da problemi sia nella sorgente (ad
033 * esempio url irraggiungibile) che nella destinazione (problemi
034 * vari di I/O).
035 */
036 public static void download(final URL url, final OutputStream outputStream,
037 final int bufferSize) throws IOException {
038 // Url input stream
039 final InputStream inputStream = url.openStream();
040 try {
041 // I BufferedInputStream e BufferedOutputStream non sono necessari
042 // ma migliorano le performance
043 final BufferedInputStream bufferedInputStream = new BufferedInputStream(
044 inputStream);
045 try {
046 final BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(
047 outputStream);
048 try {
049 final byte[] buffer = new byte[bufferSize];
050 int count;
051 while ((count = bufferedInputStream.read(buffer)) > 0) {
052 bufferedOutputStream.write(buffer, 0, count);
053 }
054
055 } finally {
056 bufferedOutputStream.close();
057 }
058 } finally {
059 bufferedInputStream.close();
060 }
061 } finally {
062 inputStream.close();
063 }
064 }
065
066 /**
067 * Metodo che salva su un file su un java.io.File la risorsa identificata da
068 * un URL
069 *
070 * @param url
071 * URL da scaricare
072 * @param outputStream
073 * outputstream di destinazione
074 * @param bufferSize
075 * numero di byte letti ad ogni iterazione
076 * @throws IOException
077 * potrebbe essere causata da problemi sia nella sorgente (ad
078 * esempio url irraggiungibile) che nella destinazione (file già
079 * esistente, problemi di permessi, ...).
080 */
081
082 public static void download(final URL url, final File file,
083 final int bufferSize) throws IOException {
084 if (file.exists()) {
085 throw new IllegalArgumentException(file.getAbsolutePath()
086 + " already exists");
087 }
088
089 final FileOutputStream fileOutputStream = new FileOutputStream(file);
090 try {
091 download(url, fileOutputStream, bufferSize);
092 fileOutputStream.flush();
093 } finally {
094 fileOutputStream.close();
095 }
096 }
097
098 /**
099 * Metodo main usato per test
100 *
101 * @param args
102 */
103 public static void main(String[] args) {
104 try {
105 URL url = new URL("http://pilloledijava.blogspot.com/");
106 File f = new File("/home/pdj/Scrivania/blog.html");
107 download(url, f, 4096);
108 } catch (Exception e) {
109 e.printStackTrace();
110 }
111 }
112
113 }
Post correlati:
Download di un file in Java
ciao come faccio a manipolare i singoli caratteri della pagina html ? anche in presenza di caratteri latin-1 ?
RispondiElimina