Blog / 阅读

java jna调用迅雷接口下载

by admin on 2014-04-20 15:15:47 in ,



---> 不支持多线程
---> 依赖32位jdk,windows 和jna.jar
---> 依赖 XLDownload.dll, zlib1.dll  放置项目跟目录。不是src下,可以为绝对路径


[java] view plaincopyprint?
package com.leunpha;  
  
import com.sun.jna.Native;  
import com.sun.jna.NativeLong;  
import com.sun.jna.WString;  
import com.sun.jna.ptr.LongByReference;  
import com.sun.jna.ptr.NativeLongByReference;  
import com.sun.jna.win32.StdCallLibrary;  
  
import java.util.*;  
import java.util.concurrent.*;  
import java.util.concurrent.atomic.AtomicInteger;  
  
public class XLDownLoader {     
    String FileName;  
    String Url;  
    long task;  
     
    /** 
     *  
     * @param FileName  saved file path 
     * @param Url  pre-downloaded url 
     * @param task  taskid 
     */  
      
    public XLDownLoader( String FileName,String Url,long task){  
        this.FileName=FileName;  
        this.Url=Url;  
        this.task=task;  
    }  
      
    public interface XLDownload extends StdCallLibrary {     
         public boolean XLInitDownloadEngine();  
         public int XLURLDownloadToFile(WString pszFileName, WString pszUrl, WString pszRefUrl, NativeLongByReference lTaskId);  
         public int XLQueryTaskInfo(NativeLong lTaskId, NativeLongByReference plStatus, LongByReference pullFileSize, LongByReference pullRecvSize);  
         public int XLPauseTask(long lTaskId, NativeLongByReference lNewTaskId);  
         public int XLContinueTask(long lTaskId);  
         public int XLContinueTaskFromTdFile(WString pszTdFileFullPath, NativeLongByReference lTaskId);  
         public void XLStopTask(long lTaskId);  
         public boolean XLUninitDownloadEngine();  
    }  
    /** 
     *  
     * @return 268435467 pre-downloaded file exist in specified file path 
     *         -1 Fail to initialize(Fail to find DLL) 
     *         12 Succeed in downloading file of specified url 
     */  
  
    public int startTask(String link){  
        XLDownload xldownload = (XLDownload) Native.loadLibrary(link,XLDownload.class);  
        if(false==xldownload.XLInitDownloadEngine()){  
            System.out.println("Initialize download engine failed");  
            return -1;  
        }  
        WString pszFileName=new WString(FileName);  
        WString pszUrl=new WString(Url);  
        WString pszRefUrl=new WString("");  
        NativeLong TaskId=new NativeLong(task);  
        NativeLongByReference lTaskId=new NativeLongByReference(TaskId);  
          
        int dwRet=xldownload.XLURLDownloadToFile(pszFileName,pszUrl ,pszRefUrl, lTaskId);  
        do{  
            LongByReference ullFileSize =new LongByReference(0);  
            LongByReference ullRecvSize =new LongByReference(0);  
            NativeLongByReference  lStatus=new NativeLongByReference(new NativeLong(-1L));  
            dwRet=xldownload.XLQueryTaskInfo(TaskId,lStatus,ullFileSize,ullRecvSize);  
            if(0==dwRet){  
                try {  
                    Thread.sleep(1000);  
                } catch (InterruptedException e) {  
                    e.printStackTrace();  
                }  
                if ( 0 != ullFileSize.getValue() )  
                {  
                     double  douProgress = (double)ullRecvSize.getValue()/(double)ullFileSize.getValue();  
                     douProgress *= 100.0;  
                     System.out.println(FileName+"Download progress:"+douProgress+"%");  
                }  
                else  
                {  
                     System.out.println("File size is zero.\n");  
                }  
  
                if (11==lStatus.getValue().intValue())  
                {  
                     System.out.println("Download successfully.\n");  
                     break;  
                }  
  
                if ( 12==lStatus.getValue().intValue() )  
                {  
                     System.out.println("Download failed.\n");  
                     break;  
                }  
            }  
        }while(0==dwRet);  
        xldownload.XLStopTask(this.task);  
        xldownload.XLUninitDownloadEngine();  
        return 12;  
    }  
    
    public static void main(String[] args){    
        Map<String,String> info = new HashMap<String, String>();  
        info.put("e:\\temp\\18ec54e736d12f2ee6d124c84dc2d56284356846.jpg","http://h.hiphotos.bdimg.com/wisegame/pic/item/18ec54e736d12f2ee6d124c84dc2d56284356846.jpg");  
        info.put("e:\\temp\\9bdcd100baa1cd11d028f888bb12c8fcc2ce2df8.jpg","http://c.hiphotos.bdimg.com/wisegame/pic/item/9bdcd100baa1cd11d028f888bb12c8fcc2ce2df8.jpg");  
        info.put("e:\\temp\\2410b912c8fcc3cef9f7d0ab9045d688d43f2076.jpg","http://c.hiphotos.bdimg.com/wisegame/pic/item/2410b912c8fcc3cef9f7d0ab9045d688d43f2076.jpg");  
        info.put("e:\\temp\\579b033b5bb5c9eadd791d7bd739b6003bf3b3a4.jpg","http://a.hiphotos.bdimg.com/wisegame/pic/item/579b033b5bb5c9eadd791d7bd739b6003bf3b3a4.jpg");  
        info.put("e:\\temp\\aaea15ce36d3d5397db7115b3887e950342ab0a4.jpg","http://d.hiphotos.bdimg.com/wisegame/pic/item/aaea15ce36d3d5397db7115b3887e950342ab0a4.jpg");  
        info.put("e:\\temp\\abfcc3cec3fdfc03ae4ffa20d63f8794a4c22676.jpg","http://e.hiphotos.bdimg.com/wisegame/pic/item/abfcc3cec3fdfc03ae4ffa20d63f8794a4c22676.jpg");  
        info.put("e:\\temp\\f145d688d43f8794e4c851b6d01b0ef41bd53a76.jpg","http://a.hiphotos.bdimg.com/wisegame/pic/item/f145d688d43f8794e4c851b6d01b0ef41bd53a76.jpg");  
    //   final AtomicInteger ai = new AtomicInteger(1);  
    //    ExecutorService service = Executors.newFixedThreadPool(1);  
    //    int i=1;  
     //   List<Future> futures = new ArrayList<Future>();  
        for(final Map.Entry<String,String> entry: info.entrySet()){  
            //i++;  
            XLDownLoader instance=new XLDownLoader(entry.getKey(),entry.getValue(),0);  
            instance.startTask(String.format("XLDownload",1));  
  
            /*service.execute(new Runnable() { 
                @Override 
                public void run() { 
                    com.leunpha.XLDownLoader instance=new com.leunpha.XLDownLoader(entry.getKey(),entry.getValue(),ai.get()); 
                    instance.startTask("E:\\xl\\"+ai.getAndIncrement()+"\\XLDownload.dll"); 
                } 
            }); 
            futures.add(service.submit(new Callable() { 
                @Override 
                public Object call() throws Exception { 
 
                    return null; 
                } 
            }));*/  
        }  
     /*   service.shutdown(); 
        for(Future future:futures){ 
            try { 
                future.get(); 
            } catch (InterruptedException e) { 
                e.printStackTrace(); 
            } catch (ExecutionException e) { 
                e.printStackTrace(); 
            } 
        }*/  
  
    }  
  
  
       
}    





写评论

相关文章

上一篇:C#实现文件压缩解压类

下一篇:DES加密算法详解- -

评论

写评论

* 必填.

分享

栏目

赞助商


热门文章

Tag 云