在FtpClient中用ftp FTP命令建自己要用的东东。。

由于 sun 没有公开 FtpClient API 所以我们 將就使用 Sun 的未 公开 类别 暫時應急一下,方法命名大多與 Common net ftpClient 雷同,不足的只好用 issueCommand 自己丟 FTP 命令:
 
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.Proxy;
import sun.net.TelnetInputStream;
import sun.net.TelnetOutputStream;
import sun.net.ftp.FtpClient;
public class SundFtpClient extends FtpClient {
  public static final int   ASCII_FILE_TYPE =0;
  public static final int   BINARY_FILE_TYPE=2;
  public SundFtpClient(String host) throws IOException {
    super(host);
  }
  public SundFtpClient(String host, int port) throws IOException {
    super(host, port);
  }
  public int issueCommand(java.lang.String cmd) throws IOException{
    return super.issueCommand(cmd);
  }
  public void issueCommandCheck(java.lang.String cmd) throws IOException{
    super.issueCommandCheck(cmd);
  }
  public boolean setFileType(int fileType)throws IOException{
    if(fileType==ASCII_FILE_TYPE){
      return issueCommand("TYPE A")==1;
    }else{
      return issueCommand("TYPE B")==1;
    }
  }
  public void enterLocalPassiveMode(){
    try{
      issueCommand("PASV");
    }catch(IOException e){}
  }
  public boolean isConnected(){
    return this.serverIsOpen();
  }
  public void connect(java.lang.String hostname)throws java.io.IOException{
    this.disconnect();
    this.openServer(hostname);
  }
  public void connect(java.lang.String hostname,int port)throws java.io.IOException{
    this.disconnect();
    this.openServer(hostname,port);
  }
  public void disconnect()throws java.io.IOException{
    if(this.serverIsOpen())
      this.closeServer();
  }
  public boolean deleteFile(String pathname)throws java.io.IOException{
    try{
      return issueCommand("DELE "+pathname)==1;
    }catch(FileNotFoundException e){
      return false;
    }
  }
  public boolean makeDirectory(String pathname)throws java.io.IOException{
    try{
      return issueCommand("MKD "+pathname)==1;
    }catch(FileNotFoundException e){
      return false;
    }
  }
  public boolean removeDirectory(String pathname)throws java.io.IOException{
    try{
      return issueCommand("RMD "+pathname)==1;
    }catch(FileNotFoundException e){
      return false;
    }
  }
  public boolean sendNoOp()throws java.io.IOException{
    return issueCommand("NOOP")==1;
  }
  public String printWorkingDirectory()throws java.io.IOException{
    return super.pwd();
  }
  public boolean changeToParentDirectory()throws java.io.IOException{
    return issueCommand("CDUP")==1;
  }
  public boolean changeWorkingDirectory(String pathname)throws java.io.IOException{
    try{
      return issueCommand("CWD "+pathname)==1;
    }catch(FileNotFoundException e){
      return false;
    }
  }
  public void storeFile(String remote,java.io.InputStream local)throws java.io.IOException{
    byte[] buf = new byte[1024];
    int readed=0;
    TelnetOutputStream outs = this.put(remote);
    synchronized (local) {
     while((readed=local.read(buf,0,1024))>0)
        outs.write(buf,0,readed);
      outs.flush();
      outs.close();
      local.close();
    }
  }
  public void retrieveFile(String remote,java.io.OutputStream local)throws java.io.IOException{
    byte[] buf = new byte[1024];
    int readed=0;
    TelnetInputStream ins = this.get(remote);
    synchronized (local) {
      while((readed=ins.read(buf,0,1024))>0)
        local.write(buf,0,readed);
      local.flush();
      local.close();
      ins.close();
    }
  }
}
测试代码:
import java.io.IOException;
import sun.net.ftp.FtpLoginException;
/*
 * 作成日: 2006/04/17
 *
 * TODO この生成されたファイルのテンプレートを変更するには次へジャンプ:
 * ウィンドウ - 設定 - Java - コード・スタイル - コード・テンプレート
 */
/**
 * @author Border
 *
 * TODO この生成された型コメントのテンプレートを変更するには次へジャンプ:
 * ウィンドウ - 設定 - Java - コード・スタイル - コード・テンプレート
 */
public class TestSundFtpClient{
 
 
 public static void main(String[] args) {
  
  String hostname = "192.168.1.209";
  int port = 21 ;
  String uid = "anonymous";
  String pwd = "linuxborder@yahoo.com";
  String a = "";
  
  try {
   SundFtpClient aftp = new SundFtpClient(hostname,port);
   
   aftp.login(uid,pwd);  // login
   aftp.binary();  // set to binary mode transfer
   System.out.println("login:" + hostname );
   aftp.makeDirectory("make");
   System.out.println("make ok ! ");
   
   }
  catch(FtpLoginException e){
      a="login erroy: "+hostname+" please input your read uid or pwd: "+e;
      System.out.println(a);
      //return false;
     }
     catch (IOException e){
      a=" connect erroy: "+hostname+" please input your read port: "+e;
      System.out.println(a);
      //return false;
     }
     catch(SecurityException e)
     {
      a=" can't connect: "+hostname+" please check your net: "+e;
      System.out.println(a);
      //return false;
     }
 }
 
 
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值