嗯,就这样吧,先实现着。ftp下载需要 commons-net-3.6.jar包。参考了几篇文章,在文学上不能算原创了。

import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.RandomAccessFile;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.Base64;
import java.util.Scanner;import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;public class MKDownloader {// 定义成员变量private String path; private String targetPath; private DownFileThread[] threads;private int threadNum;private long length; public MKDownloader(String path, String targetPath, int threadNum) {super();this.path = path;this.targetPath = targetPath;this.threads = new DownFileThread[threadNum];this.threadNum = threadNum;}public void download() {URL url;try {if(path.indexOf("http://")==0 || path.indexOf("https://")==0) {url = new URL(path);HttpURLConnection conn = (HttpURLConnection) url.openConnection();conn.setReadTimeout(20 * 1000);conn.setRequestMethod("GET");conn.setRequestProperty("connection", "keep-alive");conn.setRequestProperty("accept", "*/*");// 获取远程文件的大小length = conn.getContentLengthLong();conn.disconnect();}else if(path.indexOf("ftp://")==0) {//System.out.println("Comming Soon...2");//System.out.println("Comming Soon...");String User="Anonymous";String PassWord="";String SerUrl=null;ArrayList<String> DrvList=new ArrayList<String>();String tempDrvs="/";String fileName="";int port=21;if(path.indexOf("@")!=-1) {User=path.substring(path.indexOf("//",0)+2,path.indexOf(":",path.indexOf("//")+2));PassWord=path.substring(path.indexOf(":",path.indexOf("//"))+1,path.indexOf("@"));SerUrl=path.substring(path.indexOf("@")+1,path.indexOf("/",path.indexOf("@")));if(path.indexOf("/",path.indexOf("@")+1) < path.lastIndexOf("/")) {tempDrvs=path.substring(path.indexOf("/",path.indexOf("@")+1)+1,path.lastIndexOf("/"));}}else {SerUrl=path.substring(path.indexOf("//")+2 , path.indexOf("/",path.indexOf("//")+2));if(path.indexOf("/",path.indexOf("//")+2) < path.lastIndexOf("/")) {tempDrvs=path.substring(path.indexOf("/",path.indexOf("//")+2)+1,path.lastIndexOf("/"));}}String ftpCurDrv=tempDrvs.replace("/","\\");if(SerUrl.indexOf(":")!=-1) {port=Integer.parseInt(SerUrl.substring(SerUrl.indexOf(":")+1));SerUrl=SerUrl.substring(0,SerUrl.indexOf(":"));}fileName=path.substring(path.lastIndexOf("/")+1);FTPClient ftpClient=FTPUtil.ftpConn(SerUrl, port, User, PassWord);//try {ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);ftpClient.changeWorkingDirectory(ftpCurDrv);FTPFile[] ftpFiles=ftpClient.listFiles("\\"+fileName);FTPFile ftpFile=ftpFiles[0];if(null !=ftpFile && ftpFile.isFile()) {length=ftpFile.getSize();}}catch(IOException ex) {ex.printStackTrace();}FTPUtil.ftpClose(ftpClient);}RandomAccessFile targetFile = new RandomAccessFile(targetPath, "rw");targetFile.setLength(length);targetFile.close();long avgPart = length / threadNum + 1;for (int i = 0; i < threadNum; i++) {long startPos = avgPart * i;RandomAccessFile targetTmp = new RandomAccessFile(targetPath,"rw");targetTmp.seek(startPos);threads[i] = new DownFileThread(startPos, targetTmp, avgPart);threads[i].start();}} catch (Exception e) {e.printStackTrace();}}public double getDownRate() {long currentSize = 0;for (int i = 0; i < threadNum; i++) {currentSize += threads[i].length;}return currentSize * 1.0 / length;}class DownFileThread extends Thread {private long startPos;private RandomAccessFile raf;private long size;private long length;public DownFileThread(long startPos, RandomAccessFile raf, long size) {super();this.startPos = startPos;this.raf = raf;this.size = size;}public void run() {URL url;try {InputStream in=null;if(path.indexOf("http://")==0 || path.indexOf("https://")==0) {url = new URL(path);HttpURLConnection conn = (HttpURLConnection) url.openConnection();conn.setReadTimeout(120 * 1000); conn.setRequestMethod("GET");conn.setRequestProperty("connection", "keep-alive");conn.setRequestProperty("accept", "*/*");in = conn.getInputStream();}else if(path.indexOf("ftp://")==0) {//System.out.println("Comming Soon...");String User="Anonymous";String PassWord="";String SerUrl=null;ArrayList<String> DrvList=new ArrayList<String>();String tempDrvs="/";String fileName="";int port=21;if(path.indexOf("@")!=-1) {User=path.substring(path.indexOf("//",0)+2,path.indexOf(":",path.indexOf("//")+2));PassWord=path.substring(path.indexOf(":",path.indexOf("//"))+1,path.indexOf("@"));SerUrl=path.substring(path.indexOf("@")+1,path.indexOf("/",path.indexOf("@")));if(path.indexOf("/",path.indexOf("@")+1) < path.lastIndexOf("/")) {tempDrvs=path.substring(path.indexOf("/",path.indexOf("@")+1)+1,path.lastIndexOf("/"));}}else {SerUrl=path.substring(path.indexOf("//")+2 , path.indexOf("/",path.indexOf("//")+2));if(path.indexOf("/",path.indexOf("//")+2) < path.lastIndexOf("/")) {tempDrvs=path.substring(path.indexOf("/",path.indexOf("//")+2)+1,path.lastIndexOf("/"));}}String ftpCurDrv=tempDrvs.replace("/","\\");if(SerUrl.indexOf(":")!=-1) {port=Integer.parseInt(SerUrl.substring(SerUrl.indexOf(":")+1));SerUrl=SerUrl.substring(0,SerUrl.indexOf(":"));}fileName=path.substring(path.lastIndexOf("/")+1);//System.out.println(User);//System.out.println(PassWord);//System.out.println(SerUrl);//System.out.println(port);//System.out.println(tempDrvs);//System.out.println(fileName);FTPClient ftpClient=FTPUtil.ftpConn(SerUrl, port, User, PassWord);//try {ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);ftpClient.changeWorkingDirectory(ftpCurDrv);//FTPFile[] ftpFiles=ftpClient.listFiles("\\"+fileName);//FTPFile ftpFile=ftpFiles[0];//File localFile=new File(targetPath+fileName);//OutputStream out=new FileOutputStream(localFile);//System.out.println(ftpFile.getName());//ftpClient.retrieveFile(ftpFile.getName(), out);in=ftpClient.retrieveFileStream(fileName);//out.flush();//out.close();//System.out.println("下载完毕");}catch(IOException ex) {ex.printStackTrace();}//}in.skip(this.startPos);byte[] buf = new byte[1024];int hasRead = 0;while (length < size && (hasRead = in.read(buf)) != -1) {raf.write(buf, 0, hasRead);length += hasRead;}raf.close();in.close();} catch (Exception e) {e.printStackTrace();}}//下载ftp文件//连接ftp服务器/*public  FTPClient ConnectFtpServer(String StrServerUrl,int intPort,String StrUserName,String StrPassWord,String controlEcoding) {FTPClient ftpClient=new FTPClient();return ftpClient;}*/}public static void main(String[] args) {//thunder转成httpString thunder;String Url="";Scanner input=new Scanner(System.in);while(true){System.out.print("输入迅雷下载地址:");thunder=input.nextLine();if(thunder.equals("exit")){System.exit(0);}else if(thunder.indexOf("thunder://")!=0){if(thunder.indexOf("http://")==0 || thunder.indexOf("ftp://")==0 || thunder.indexOf("https://")==0) {Url=thunder;//System.out.println("https is ok"+thunder);break;}else {System.out.println("链接格式错误,请输入thunder://开头的迅雷链接格式");continue;}}System.out.println("迅雷地址:"+thunder);String base64=thunder.substring(10);System.out.println("Base64:"+base64);String str="";try{byte[] bytes = Base64.getDecoder().decode(base64);str=new String(bytes, "UTF-8");}catch(UnsupportedEncodingException | IllegalArgumentException e){System.out.println("BASE64不能解码,请输入正确的格式");continue;}if(str.indexOf("AA")==0 && str.indexOf("ZZ")==str.length()-2){Url=str.substring(2,str.length()-2);}else{System.out.println("链接未能转化,请输入正确的迅雷链接地址");continue;}        //setSysClipboardText(Url);System.out.println("URL:" + Url);//目前还不能下载ftp/*if(Url.indexOf("ftp://")==0) {System.out.println("目前不能ftp下载");continue;}*/break;}//end//InputStreamReader in = new InputStreamReader(System.in); //BufferedReader bufferedReader = new BufferedReader(in); //System.out.print("请输入下载地址:"); //try { // input = bufferedReader.readLine(); //读取用户输入//} catch (IOException e) {//   e.printStackTrace(); //System.out.println(e.toString()); //} //System.out.println(input);String path = Url;String downLoadPath="F:\\miucat\\DownLoad\\";String targetPath = downLoadPath+Url.substring(Url.lastIndexOf('/')+1,Url.contains("?") ? Url.lastIndexOf('?'):Url.length());final MKDownloader download = new MKDownloader(path, targetPath, 4);download.download();new Thread(new Runnable() {@Overridepublic void run() {System.out.print("      %");while (download.getDownRate() < 1) {String strRate=String.format("%.2f", download.getDownRate()*100);System.out.print("\r");System.out.print(strRate);try {Thread.sleep(200); } catch (InterruptedException e) {e.printStackTrace();}}System.out.print("\r");System.out.println("100.00");}}).start();}    }class FTPUtil{public static FTPClient ftpConn(String SerUrl,int Port,String User,String PassWord) {FTPClient ftpClient=new FTPClient();//ftpClient.setControlEncoding(controlEncoding);try {ftpClient.connect(SerUrl,Port);ftpClient.login(User,PassWord);ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);ftpClient.setControlEncoding("GBK");int reply = ftpClient.getReplyCode();if (!FTPReply.isPositiveCompletion(reply)) {System.out.println("服务器响应失败!正在断开连接。。。");ftpClient.abort();ftpClient.disconnect();}}catch(IOException ex) {ex.printStackTrace();System.out.println("Ftp Server连接失败");}return ftpClient;}public static FTPClient ftpClose(FTPClient ftpClient) {try {if (ftpClient != null && ftpClient.isConnected()) {ftpClient.abort();ftpClient.disconnect();}} catch (IOException e) {e.printStackTrace();}return ftpClient;}
}

java 实现http/ftp下载,支持迅雷地址转换的草稿相关推荐

  1. amd处理器不支持slat_如何检查您的CPU是否支持二级地址转换(SLAT)

    amd处理器不支持slat Windows 8 will bring a lot of new features to the Windows computing environment, one o ...

  2. 检查 CPU 是否支持二级地址转换 - 摘自网络

    Windows 8 Consumer Preview 于2月正式发布,随后 Windows Server 8 Beta 也公布了下载.整体对比,Windows 8 在硬件方面的要求并不高,其最低硬件需 ...

  3. 如何判断cpu是否支持二级地址转换SLAT(EPT)

    Windows 8 Consumer Preview 于2月正式发布,随后  Windows Server 8 Beta  也公布了下载.整体对比,Windows  8 在硬件方面的要求并不高,其最低 ...

  4. 迅雷,快车,旋风,飞速地址转换原理分析

    firefox迅雷地址转换插件,ccdos制作,下载地址在本博克的友情链接中的 我的软件和资料共享下载 linux相关软件  目录下saolei-0.4.xpi 下载后直接拖入firefox窗口,即可 ...

  5. php下载链接 迅雷下载,php实现把url转换迅雷thunder资源下载地址的方法

    php实现把url转换迅雷thunder资源下载地址的方法 本文实例讲述了php实现把url转换迅雷thunder资源下载地址的方法.分享给大家供大家参考.具体方法分析如下: 如果你知道迅雷地址的生成 ...

  6. Java实现FTP下载文件到客户端(浏览器)

    目录 一.简介 二.maven依赖 三.配置类 四.工具类 4.1.服务器文件名中文处理 4.2.下载文件名中文处理 五.接口验证 一.简介   我在之前的文章(Java实现文件上传和下载)里讲过非F ...

  7. java ftp下载文件源码_java实现ftp文件下载的源代码

    这几天做的一个项目中用到了ftp文件传输,用java实现了ftp文件的下载. 一.win7下搭建ftp服务器 详见:http://jingyan.baidu.com/article/4b52d7026 ...

  8. Java FTP下载文件以及编码问题小结

    问题 之前在开发过程中,遇到了一点问题,我要访问一个FTP服务器去下载文件详细情况如下: 1. 需要传入一个可能为中文的文件名: 2. 通过文件名去FTP上寻找该文件: 3. FTP服务器的命名编码为 ...

  9. java实现的FTP上传下载客户端

    org.apache.commons.net.ftp.*中的FTPClient类实现的FTP上传下载功能: 需导入Apache的commos-net的jar包,若导入的是1.4版本的包,则FTPFil ...

最新文章

  1. java 根据实体对象生成 增删改的SQL语句 ModelToSQL
  2. python画相关性可视化图上三角_完成这50个Matplotlib代码,你也能画出优秀的图表...
  3. LeetCode 375. 猜数字大小 II(DP)
  4. 【英语学习】【English L06】U02 Food L4 Food around the world
  5. 从有限状态机(FSM)到行为树(Behavior Tree)(1)
  6. Q114:阅读PBRT-V3官方源代码的正确姿势
  7. Jenkins手动更新AWS 上面的ECS服务
  8. 最快的 java 图像_java – 最快的性能过滤图像
  9. php留言板系统管理,php留言板系统 更加便于网站管理
  10. Python学习笔记(4)-文件读取报错
  11. svn版本库浏览器_版本库浏览器
  12. 给 perl hacker 们看的(ReShip)
  13. COMSOL有限元仿真深度指南:为结构件添加预应变
  14. 大学物理实验长度的测量实验报告_大学物理实验教案长度和质量的测量
  15. 国内安卓统一推送通道
  16. 流媒体分析之rtmp协议srs服务器数据收发
  17. 3.JavaScript核心BOM操作学习(界面交互功能)——JavaScript获取自定义的方法,开始进行节点操作
  18. 每天学习一点点python--2(运算符一)
  19. 请问这个动态表格的表单内容如何写才能存入ACCess数据库中
  20. 大话转岗PHP开发小结

热门文章

  1. 数据交易隐私保护,数据转卖,交易公平
  2. python web py入门(13)- 实现发贴到论坛
  3. matlab散点图和拟合曲线,matlab – 最佳拟合散点图
  4. 分享几个proxy网站
  5. 一名大学生在银行工作8年的职场感悟---功之成,非成于成功之日,盖必有所由起
  6. 手慢无,阿里云神作被《Spring Boot进阶原理实战》成功扒下,限时
  7. excel 无法使用 ctrl + enter 填充空值
  8. 弹出html对话框样式,对话框或弹出自定义样式的3种方法
  9. 神秘电影质感开场预告pr视频模板 PR开场视频模板
  10. 2022年全球及中国危险区域旋转编码器行业头部企业市场占有率及排名调研报告