zoukankan      html  css  js  c++  java
  • 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);
        }
    
        
    }
  • 相关阅读:
    aspcms产品详情页调取相关产品
    构造函数中返回一个对象对结果有什么影响
    跨域的几种方法及案例代码
    localStorage兼容方案
    H5 拖放事件详解
    由作用域安全的构造函数想到的
    valueOf和toString的区别
    网页布局--自适应
    【MongoDB系列】简介、安装、基本操作命令
    【JavaWeb】之Servlet
  • 原文地址:https://www.cnblogs.com/nanfei/p/8418663.html
Copyright © 2011-2022 走看看