当前位置:编程学习 > JAVA >>

java如何从ftp下载超大文件

package downloadMap;
 
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Enumeration;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipOutputStream;
import javax.swing.JOptionPane;
import javax.swing.ProgressMonitorInputStream;
import TIp.Jframet;
import doFile.ZipToFile;
import sun.net.TelnetInputStream;
import sun.net.TelnetOutputStream;
import sun.net.ftp.FtpClient;
public class FtpZipOption {
/**
  *
  * 从ftp服务器下载zip文件
  *
  * @param
  *
  *@throws Exception
  **/
public static void downLoadZipFile(String wantFileName ) throws Exception {
/*new Thread(){
  public void run(){
   Jframet jf = new Jframet("正在链接ftp,qing'shao'h", "确定");
   jf.jb.setVisible(false);
  }
}.start();*/
  String[] localFileNameArray = getLocalFileNameArray("c:\\BaseMap");// 得到所有已经下载的tb文件名
  File downFile=new File("c:\\BaseMap");
  if(!downFile.exists()) downFile.mkdir();
 
  if (ifToDownLoadFile(wantFileName, localFileNameArray)) {// 判断是否需要下载
   String str; // 输出信息字符串
   /**
    *
    * 和服务器建立连接
    */
   FtpClient ftp = new FtpClient("172.18.2.66"); // 根据服务器ip建立连接
  
   //JOptionPane.showMessageDialog(null, "");
   str = ftp.getResponseString(); // 获得响应信息
   System.out.println("连接服务器:" + str);
  
   /**
    *
    * 登陆到Ftp服务器
    */
   ftp.login("admin", "1"); // 根据用户名和密码登录服务器
   str = ftp.getResponseString();
   System.out.println("登录:" + str);
  
   
   /**
    *
    * 打开并定位到服务器目录
    */
   ftp.cd("mapdata2"); // 打开服务器上的文件目录
   str = ftp.getResponseString();
   System.out.println("打开服务器目录:" + str);
   ftp.binary();// 转化为二进制的文件
   TelnetInputStream ftpIn = ftp.get(wantFileName + ".zip");// 找到要读取的文件
  
   /*Jframet jf=new Jframet("正在下载地图,请稍候...","确定");
   jf.jb.setVisible(false);*/
   long fileLength=FtpZipOption.getFileSize("wantFileName.zip");
   System.out.println(fileLength);
   byte[] buf = new byte[204800];
   int bufsize = 0;
   File f=new File("c:\\BaseMap");
   if(!f.exists()) f.mkdirs();
   String toLocalPath = "c:\\BaseMap\\" + wantFileName + ".zip";
   /*File f=new File(toLocalPath);
   f.mkdirs();*/
   FileOutputStream ftpOut = new FileOutputStream(toLocalPath);
   int readLine=0;
   while ((bufsize = ftpIn.read(buf, 0, buf.length)) != -1) {
    //System.out.println(bufsize);
    ftpOut.write(buf, 0, bufsize);
    readLine=+bufsize;
   
   }
   System.out.println(readLine);
   ftpOut.close();
   ftpIn.close();
   ZipToFile ziptofile=new ZipToFile();
  
         String  PostFilePath = "c:\\BaseMap";  
          ziptofile.zipToFile(toLocalPath, PostFilePath);
  // JOptionPane.showMessageDialog(null, "下载" + wantFileName + ".zip完成!");
   System.out.println("下载" + wantFileName + ".zip完成!");
  /* jf.jl.setText("下载地图成功");
   jf.jb.setVisible(true);*/
  } else {
  
  }
}
public static long getFileSize(String filename) throws IOException {
  String str; // 输出信息字符串
  /**
   *
   * 和服务器建立连接
   */
  FtpClient ftp = new FtpClient("172.18.2.66"); // 根据服务器ip建立连接
  str = ftp.getResponseString(); // 获得响应信息
  System.out.println("连接服务器:" + str);
  /**
   *
   * 登陆到Ftp服务器
   */
  ftp.login("admin", "1"); // 根据用户名和密码登录服务器
  str = ftp.getResponseString();
  System.out.println("登录:" + str);
  /**
   *
   * 打开并定位到服务器目录
   */
  ftp.cd("mapdata2"); // 打开服务器上的文件目录
  str = ftp.getResponseString();
  System.out.println("打开服务器目录:" + str);
  ftp.binary();// 转化为二进制的文件
  long fileSize = -1;
  String s = "SIZE " + filename + "\r\n";
  ftp.sendServer(s);
  try {
  int status = ftp.readServerResponse();
  if (status == 213) {
  String msg = ftp.getResponseString();
  fileSize = Long.parseLong(msg.substring(3).trim());
  }
  } catch (IOException e) {
  e.printStackTrace();
  }
  return fileSize;
  }
// 上传文件;并返回上传文件的信息
/*private static String upLoadZipToServer(String filename) throws Exception {
  String str; // 输出信息字符串
  String timeStr = getNowTime();// 获得当前时间
  String recordStr = "上传时间:" + timeStr + "\r\n";// 信息记录字符串
  *//**
   *
   * 和服务器建立连接
   *//*
  FtpClient ftp = new FtpClient("192.168.39.189"); // 根据服务器ip建立连接
  str = ftp.getResponseString(); // 获得响应信息
  System.out.println(str);
  recordStr += "连接服务器:" + str + "\r\n";
  *//**
   *
   * 登陆到Ftp服务器
   *//*
  ftp.login("test", "test"); // 根据用户名和密码登录服务器
  str = ftp.getResponseString();
  System.out.println(str);
  recordStr += "登录:" + str + "\r\n";
  *//**
   *
   * 打开并定位到test目录
   *//*
  ftp.cd("uptest"); // 打开服务器上的test文件夹
  ftp.binary();// 转化为二进制的文件
  str = ftp.getResponseString();
  System.out.println
补充:软件开发 , Java ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,