importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.InputStream;importjava.net.MalformedURLException;importjava.net.URL;importjava.net.URLConnection;importjava.text.DecimalFormat;importjava.util.ArrayList;importjava.util.EventListener;importjava.util.List;public classTest {public static voidmain(String[] args)
{
Test.FileDownloader fd= new FileDownloader("http://download.microsoft.com/download/e/c/9/ec94a5d4-d0cf-4484-8b7a-21802f497309/Vs6sp6.exe","f:\\Vs6sp6.exe");
fd.addDownloadListener(newDownloadListener() {
@Overridepublic void DownloadProgress(int totalLength ,intbytesCompleted) {
System.out.println("订阅者1进度,已下载:" + bytesCompleted + "字节");
}
});
fd.addDownloadListener(newDownloadListener() {
@Overridepublic void DownloadProgress(int totalLength ,intbytesCompleted) {double percent = (double)bytesCompleted*100/(double)totalLength;
DecimalFormat df= new java.text.DecimalFormat("#.00");
System.out.println("订阅者2进度,已下载:" + df.format(percent) + "%");
}
});
fd.download();
System.out.println("任务下载完成!");
}public static class FileDownloader implementsDownloadListener
{private List downloadListeners = new ArrayList();private String URL = null;private String savePath = null;publicFileDownloader(String url, String savePath)
{this.URL =url;this.savePath =savePath;
}
@SuppressWarnings("resource")public booleandownload()
{int bytesum = 0;int byteread = 0;
URL url;try{
url= new URL(this.URL);
}catch(MalformedURLException e1) {
e1.printStackTrace();return false;
}try{
URLConnection conn=url.openConnection();int totalLength =conn.getContentLength();
InputStream inStream=conn.getInputStream();
FileOutputStream fs= new FileOutputStream(this.savePath);byte[] buffer = new byte[1204];while ((byteread = inStream.read(buffer)) != -1) {
bytesum+=byteread;
fs.write(buffer,0, byteread);
DownloadProgress(totalLength ,bytesum);
}
}catch(FileNotFoundException e) {
e.printStackTrace();return false;
}catch(IOException e) {
e.printStackTrace();return false;
}catch(Exception e){
e.printStackTrace();return false;
}return true;
}
@Overridepublic void DownloadProgress(int totalLength ,intbytesCompleted) {for(DownloadListener listener : downloadListeners){
listener.DownloadProgress(totalLength ,bytesCompleted);
}
}public voidaddDownloadListener(DownloadListener listener)
{
downloadListeners.add(listener);
}
}public interface DownloadListener extendsEventListener
{public void DownloadProgress(int totalLength ,intbytesCompleted);
}
}