wocaosinima 发表于 2015-5-27 12:00:36

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;
}

privateboolean Binary()
{
boolean bRet=false;
try
{
   client.binary();
   bRet=true;
}
catch(IOException ex)
{
   bRet=false;
}
return bRet;
}
privateboolean 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;
             while(true)
             {
            int iRead=srcFile.read(b);
            if(iRead= 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;
             while(true)
             {
            int iRead=puts.read(b);
            if(iRead= 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
页: [1]
查看完整版本: JAVA调用sun的ftp包的上传类