zoukankan      html  css  js  c++  java
  • 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();
      
     }
    }

  • 相关阅读:
    Bootstrap历练实例:输入框组的大小
    bootstrap历练实例:复选框或单选按钮作为输入框组的前缀或后缀
    bootstrap历练实例:按钮作为输入框组前缀或后缀
    Bootstrap历练实例:垂直的按钮组
    [uiautomator篇][exist 存在,但click错误]
    [python篇][1]configparser 问题汇总
    [python篇][其他] python博客学习汇总
    [uiautomator篇][8] 增加应用读取内置存储卡的权限
    [uiautomator篇] 使用uiautomator需要导入uiautomator库
    [uiautomator篇][9]遇到问题
  • 原文地址:https://www.cnblogs.com/zsxfbj/p/2049462.html
Copyright © 2011-2022 走看看