sabato 9 aprile 2011

Download di un file in Java: codice d'esempio


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 bufferSizethrows 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 bufferSizethrows 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

1 commento:

  1. ciao come faccio a manipolare i singoli caratteri della pagina html ? anche in presenza di caratteri latin-1 ?

    RispondiElimina