JAVA调用sun的ftp包的上传类

package waf.net.ftp;

import sun.net.ftp.*;
import java.io.*;

import sun.net.*;

public class FtpClient
{

 private sun.net.ftp.FtpClient client=null;
 private String strServerAddr="";
 private int iServerPort=0;
 private String strUserName="";
 private String strUserPwd="";
 
 private int iRetryTimes=0;
 
 
 
 // 监测连接是否正常
 public boolean CheckConn()
 {
  boolean bRet=false;
  try
  {
   client.pwd();
   bRet=true;
  }
  catch(IOException ex)
  {
   bRet=false;
  }
  
  return bRet;
 }
 
 private  boolean Binary()
 {
  boolean bRet=false;
  try
  {
   client.binary();
   bRet=true;
  }
  catch(IOException ex)
  {
   bRet=false;
  }
  return bRet;
 }
 private  boolean Ascii()
 {
  boolean bRet=false;
  try
  {
   client.ascii();
   bRet=true;
  }
  catch(IOException ex)
  {
   bRet=false;
  }
  return bRet;
 }
 public boolean GetTexFile(String strSrcFile,String strDestFile)
 {
  this.Ascii();
  return GetFile(strSrcFile,strDestFile);
 }
 
 public boolean GetBinFile(String strSrcFile,String strDestFile)
 {
  this.Binary();
  return GetFile(strSrcFile,strDestFile);
 } 
 
 public boolean DisConnect()
 {
  boolean bRet=false;
  try
  {
   client.closeServer();
   bRet=true;
  }
  catch(IOException ex)
  {
   bRet=false;
  }
  return bRet;  
  
 }
 public boolean GetBinFileWithReConnect(String strSrcFile,String strDestFile)
 {
  return GetBinFileWithReConnect(strSrcFile,strDestFile,3);
 }
 public boolean GetBinFileWithReConnect(String strSrcFile,String strDestFile,int iReTryTims)
 {
  boolean bRet=false;
  
  iRetryTimes++;
  
  // 尝试三次,失败放弃
  if(iRetryTimes>=iReTryTims)
  {
   return false;
  }
  
  if(GetBinFile(strSrcFile,strDestFile))
  {
   bRet=true;
   iRetryTimes=0;
  }
  else
  {
   bRet=false;
   try
   {
    Thread.sleep(200);
   }
   catch (InterruptedException e)
   {
    e.printStackTrace();
   }
   // 如果下载失败,就先监测一下连接状态,否则连接失效,就重新连接
   if(!this.CheckConn())
   {
    // 如果是连接失效了,就重连,如果不是连接失效,那么就是文件不存在等错误,就放弃
    if(ConnectTillSuc())
    {
     if(GetBinFileWithReConnect(strSrcFile,strDestFile,iReTryTims))
     {
      bRet=true;
      iRetryTimes=0;      
     }
     
    }
   }   
  }
  
  return bRet;
 }
 
 public boolean PutFile(String strSrcFile,String strDestFile)
 {
  boolean bRet=false;
  
  try
        { 
   TelnetOutputStream fput=client.put(strDestFile);
   
   DataOutputStream puts = new DataOutputStream(fput);
   
   File fi = new File(strSrcFile);   
   RandomAccessFile srcFile = new RandomAccessFile(fi,"rw");   
   
   srcFile.seek(0);
           
            // 字节数组方式
            boolean bReadBytes=true;
           
            if(bReadBytes)
            {
             int iBufLen=4096;
             byte[] b=new byte[iBufLen];
             while(true)
             {
              int iRead=srcFile.read(b);
              if(iRead<0)
              {
               break;
              }
              puts.write(b,0,iRead);
             }
            }
            else
            {
             int ch;
       while ((ch = srcFile.read()) >= 0)
       {
        puts.write(ch);
                }             
            }

            puts.close();
   fput.close();
   srcFile.close();
   bRet=true;
   
   System.out.print("put file suc from "+strSrcFile+"   to  "+strDestFile+"\r\n");
        }
  catch (IOException ex)
  {   
   bRet=false;
   
   ex.printStackTrace();
  }  
  return bRet;
 }
 public boolean GetFile(String strSrcFile,String strDestFile)
 {
  boolean bRet=false;
  
  try
        { 
   TelnetInputStream fget=client.get(strSrcFile);
   
   DataInputStream puts = new DataInputStream(fget);
   
   File fi = new File(strDestFile);   
   RandomAccessFile getFile = new RandomAccessFile(fi,"rw");   
   
            getFile.seek(0);
           
            // 字节数组方式
            boolean bReadBytes=true;
           
            if(bReadBytes)
            {
             int iBufLen=4096;
             byte[] b=new byte[iBufLen];
             while(true)
             {
              int iRead=puts.read(b);
              if(iRead<0)
              {
               break;
              }
              getFile.write(b,0,iRead);
             }
            }
            else
            {
             int ch;
       while ((ch = puts.read()) >= 0)
       {
                    getFile.write(ch);
                }             
            }

   fget.close();
   getFile.close();
   bRet=true;
   
   System.out.print("get file suc from "+strSrcFile+"   to  "+strDestFile+"\r\n");
        }
  catch (IOException ex)
  {   
   bRet=false;
   
   ex.printStackTrace();
  }  
  return bRet;
 }
 public boolean Connect(String ServerAddr,int ServerPort,String UserName,String UserPwd)
 {
  boolean bRet=false;
  client=new sun.net.ftp.FtpClient();
  
  this.strServerAddr=ServerAddr;
  this.iServerPort=ServerPort;
  this.strUserName=UserName;
  this.strUserPwd=UserPwd;
  
  try
        {  
   client.openServer(strServerAddr,iServerPort);
   client.login(strUserName, strUserPwd);
   System.out.print("connect succeed\n");
   bRet=true;
        }
  catch (IOException ex)
  {
   ex.printStackTrace();
   bRet=false;
  }
  
  return bRet;
 }
 
 public boolean ConnectTillSuc()
 {
  return this.ConnectTillSuc(this.strServerAddr, this.iServerPort, this.strUserName, this.strUserPwd);
 }
 // 连接,直到成功
 public boolean ConnectTillSuc(String ServerAddr,int ServerPort,String UserName,String UserPwd)
 {
  while(!this.Connect(ServerAddr, ServerPort, UserName, UserPwd))
  {
   try
   {
    System.out.print("connect failed,retry...\n");
    Thread.sleep(3000);
   }
   catch (InterruptedException e)
   {
    e.printStackTrace();
   }
  }
  return true;
 } 
 
 public static void main(String[] args) throws IOException, InterruptedException
 {  
  FtpClient client=new FtpClient();
  
//  常规方式  
//  client.GetBinFile("/abc/jdom.jar", "d:\\jdom.jar");  
//  client.Connect("127.0.0.1",21,"abc","abc");
  
  
//  自动重连和重试下载方式  
//  client.ConnectTillSuc("127.0.0.1",21,"abc","abc");
//  for(int i=0;i<1000;i++)
//  {
//   client.GetBinFileWithReConnect("/abc/jdom.jar", "d:\\test\\jdom"+i+".jar");
//  }
  
  
  boolean b=client.ConnectTillSuc("127.0.0.1",21,"wd","wd");
  
  for(int i=0;i<1;i++)
  {
   client.PutFile("D:\\temp\\2010-02-01.txt", "/2010-02-01.txt");
//   System.out.print("get begin\n");
//   client.GetBinFileWithReConnect("x:\\0091\\125904094\\Record\\20070208\\13911463641_20070208163821.vox","d:\\test\\t"+i+".vox");
//   client.GetBinFileWithReConnect("x:\\0091\\125904094\\Record\\20060531181647_13409182464.VOX","d:\\test\\t"+i+".vox");
//   System.out.print("get end\n\n");
   Thread.sleep(1000*120);
  }
  
  
  client.DisConnect();
  
 }
}

原文地址:https://www.cnblogs.com/zsxfbj/p/2049462.html