java 实现自定义事件

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.EventListener;
import java.util.List;

public class Test {
    
    public static void main(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(new DownloadListener() {
            @Override
            public void DownloadProgress(int totalLength ,int bytesCompleted) {
                System.out.println("订阅者1进度,已下载:" + bytesCompleted + "字节");
            } 
        });
        
        fd.addDownloadListener(new DownloadListener() {
            @Override
            public void DownloadProgress(int totalLength ,int bytesCompleted) {
                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 implements DownloadListener
    {
        private List<DownloadListener> downloadListeners = new ArrayList<DownloadListener>();
        
        private String URL = null;
        private String savePath = null;
        
        public FileDownloader(String url, String savePath)
        {
            this.URL = url;
            this.savePath = savePath;
        }
        
        @SuppressWarnings("resource")
        public boolean download()
        {
            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;
        }

        @Override
        public void DownloadProgress(int totalLength ,int bytesCompleted) {
            for(DownloadListener listener : downloadListeners){
                listener.DownloadProgress(totalLength ,bytesCompleted);
            }
        }
        
        public void addDownloadListener(DownloadListener listener)
        {
            downloadListeners.add(listener);
        }
    }
    
    public interface DownloadListener extends EventListener 
    {
        public void DownloadProgress(int totalLength ,int bytesCompleted);
    }

    
}

 

posted on 2018-02-05 17:42  空明流光  阅读(418)  评论(0编辑  收藏  举报

导航