用VJ++实现FTP的功能

类别:Java 点击:0 评论:0 推荐:


在这里提醒一点,在网络编程中应该多使用线程,否则会出现死锁现象。
就程序界面不刷新了。

下面的程序是在VJ++中写的,并且已经通过,能运行。大家可以自己改为纯java的。

import com.ms.wfc.app.*;
import com.ms.wfc.core.*;
import com.ms.wfc.ui.*;
import com.ms.wfc.html.*;

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

/**
 * 读写在另一个socket中进行,否则会阻塞!
 */
public class Ftp_Study extends Form{
 
 FtpClient aftp;
 DataOutputStream outputs;
 DataInputStream inputs;
 TelnetInputStream ins;
 TelnetOutputStream outs;
 
 int ch;
 String a="没有连接主机";
 String b="正在连接,请等待.....";
 String currentPath="/";//当前的目录
 String selectFilePath="";//被中的文件
    String hostname="";
 String user="";
 String pwd="";
 int port =21;
 

 
 public Ftp_Study()
 {
  super();
  initForm();
  init();
  
  
 }

 /**
  * Ftp_Study overrides dispose so it can clean up the
  * component list.
  */
 public void dispose(){
  super.dispose();
  components.dispose();
 }

 private void edit2_textChanged(Object source, Event e){
  
 }

 private void label3_click(Object source, Event e){
  
 }

 private void button1_click(Object source, Event e){//connect 
  file://this.setftpProxyHost ("61.152.210.94",3128);
  
  this.label1.setText("正在连接,请等待.....");
  this.hostname =this.edit1.getText();
  this.user=this.edit2.getText();
  this.pwd=this.edit3.getText();
        if (this.connect(this.hostname,this.user,this.pwd)){
                this.button1.setEnabled(false);
                this.button2.setEnabled(true);
        }  
 }

 private void button2_click(Object source, Event e){//stop 
  System.out.println ("button stop start");
  this.stop();
        this.button1.setEnabled(true);
        this.button2.setEnabled(false);
        this.label1.setText("与主机"+hostname+"连接已断开!");
  this.edit4.setText ("");
  System.out.println ("button stop end");
 }

 private void button3_click(Object source, Event e){//go
  System.out.println ("button enterDirectoryThread start");
  String path=this.edit5 .getText ();  
  Thread t=new enterDirectoryThread(path);
  t.setPriority (Thread.MIN_PRIORITY );
  t.start();
  System.out.println ("button enterDirectoryThread end");
 }

 private void button4_click(Object source, Event e){//getfile  
  System.out.println ("button getFileThread start");
  Thread t=new getFileThread();
  t.setPriority (Thread.MIN_PRIORITY );
  t.start();  
  System.out.println ("button getFileThread end");
 }

 private void button5_click(Object source, Event e){//sendfile
  System.out.println ("button sendFileThread start");
  openFileDialog1.showDialog();
  this.selectFilePath=openFileDialog1.getFileName ();
  System.out.println (this.selectFilePath+" has been selected!");
  Thread t=new sendFileThread();
  t.setPriority (Thread.MIN_PRIORITY );
  file://t.start();
  System.out.println ("button sendFileThread end");
  
 }

 /**
  * NOTE: The following code is required by the Visual J++ form
  * designer.  It can be modified using the form editor.  Do not
  * modify it using the code editor.
  */
 Container components = new Container();
 Label label1 = new Label();
 Label label2 = new Label();
 Label label3 = new Label();
 Label label4 = new Label();
 Edit edit1 = new Edit();
 Edit edit2 = new Edit();
 Edit edit3 = new Edit();
 Edit edit4 = new Edit();
 Button button1 = new Button();
 Button button2 = new Button();
 Edit edit5 = new Edit();
 Label label5 = new Label();
 Button button3 = new Button();
 Button button4 = new Button();
 Button button5 = new Button();
 OpenFileDialog openFileDialog1 = new OpenFileDialog();

 private void initForm()
 {
  this.setText("Ftp_Study");
  this.setAutoScaleBaseSize(new Point(6, 12));
  this.setClientSize(new Point(455, 348));

  label1.setLocation(new Point(16, 8));
  label1.setSize(new Point(224, 24));
  label1.setTabIndex(0);
  label1.setTabStop(false);
  label1.setText("没有连接主机");

  label2.setLocation(new Point(8, 40));
  label2.setSize(new Point(48, 23));
  label2.setTabIndex(1);
  label2.setTabStop(false);
  label2.setText("Host:");

  label3.setLocation(new Point(8, 72));
  label3.setSize(new Point(48, 23));
  label3.setTabIndex(2);
  label3.setTabStop(false);
  label3.setText("UseID:");
  label3.addOnClick(new EventHandler(this.label3_click));

  label4.setLocation(new Point(184, 72));
  label4.setSize(new Point(56, 23));
  label4.setTabIndex(3);
  label4.setTabStop(false);
  label4.setText("PWD:");

  edit1.setLocation(new Point(64, 40));
  edit1.setSize(new Point(296, 19));
  edit1.setTabIndex(4);
  edit1.setText("");

  edit2.setLocation(new Point(56, 72));
  edit2.setSize(new Point(104, 19));
  edit2.setTabIndex(5);
  edit2.setText("");
  edit2.addOnTextChanged(new EventHandler(this.edit2_textChanged));

  edit3.setLocation(new Point(240, 72));
  edit3.setSize(new Point(104, 19));
  edit3.setTabIndex(6);
  edit3.setText("");
  edit3.setPasswordChar('*');

  edit4.setLocation(new Point(8, 160));
  edit4.setSize(new Point(440, 184));
  edit4.setTabIndex(7);
  edit4.setText("");
  edit4.setMultiline(true);
  edit4.setReadOnly(true);
  edit4.setScrollBars(ScrollBars.BOTH);
  edit4.setWordWrap(false);

  button1.setLocation(new Point(384, 16));
  button1.setSize(new Point(64, 24));
  button1.setTabIndex(8);
  button1.setText("连接");
  button1.addOnClick(new EventHandler(this.button1_click));

  button2.setEnabled(false);
  button2.setLocation(new Point(384, 48));
  button2.setSize(new Point(64, 24));
  button2.setTabIndex(9);
  button2.setText("断开");
  button2.addOnClick(new EventHandler(this.button2_click));

  edit5.setLocation(new Point(56, 104));
  edit5.setSize(new Point(312, 19));
  edit5.setTabIndex(10);
  edit5.setText("");

  label5.setLocation(new Point(16, 104));
  label5.setSize(new Point(40, 24));
  label5.setTabIndex(11);
  label5.setTabStop(false);
  label5.setText("Path:");

  button3.setLocation(new Point(384, 80));
  button3.setSize(new Point(64, 23));
  button3.setTabIndex(12);
  button3.setText("Go!");
  button3.addOnClick(new EventHandler(this.button3_click));

  button4.setLocation(new Point(224, 128));
  button4.setSize(new Point(64, 24));
  button4.setTabIndex(13);
  button4.setText("getFile");
  button4.addOnClick(new EventHandler(this.button4_click));

  button5.setLocation(new Point(304, 128));
  button5.setSize(new Point(64, 24));
  button5.setTabIndex(14);
  button5.setText("sendFile");
  button5.addOnClick(new EventHandler(this.button5_click));

  /* @designTimeOnly openFileDialog1.setLocation(new Point(288, 8)); */

  this.setNewControls(new Control[] {
       button5,
       button4,
       button3,
       label5,
       edit5,
       button2,
       button1,
       edit4,
       edit3,
       edit2,
       edit1,
       label4,
       label3,
       label2,
       label1});
 }

 public void init(){
  this.edit1.setText("202.115.16.2");
  this.edit2.setText ("anonymous");
  this.edit3.setText ("0000");  
 }
 
 public boolean connect(String hostname,String uid,String pwd){
  this.hostname =hostname;
  this.label1 .setText (this.b );
  this.a ="连接主机: "+hostname+" 成功";
  boolean bsuccess=true;//success
  
  try{
   this.aftp =new FtpClient(this.hostname);
   this.aftp.login (uid,pwd);
   this.aftp .binary ();
   this.showFileContents (); 
  }
  catch(FtpLoginException e){
   this.a="无权限与主机: "+hostname+" 连接";
   bsuccess=false;
  }
  catch(IOException e){
   this.a="连接主机: "+hostname+" 失败";   
   bsuccess=false;
  }
  catch(SecurityException e){
   this.a="无权限与主机: "+hostname+" 失败";   
   bsuccess=false;
  }
  finally{
   this.label1 .setText (a);
   return bsuccess;
  }    
 }
 
 public void stop(){
  try{
   this.aftp.closeServer ();  
  }
  catch(IOException e){
  } 
 }

 /**
  * filepath --local file path
  */
 public boolean sendFile(String filepath){
  boolean result =true;//success?
  if(this.aftp !=null){
   this.label1 .setText("正在粘贴文件,请耐心等待....");
   String contentperline;
   a="粘贴成功!";
   /*
   try {
    FtpClient ftpClient=new FtpClient();
    ftpClient.openServer(this.hostname);
    ftpClient.login(this.user ,this.pwd);
    if (this.selectFilePath.length()!=0)
        ftpClient.cd(this.currentPath);
    ftpClient.binary();
    String fn=new File(this.selectFilePath).getName();//filename
    TelnetOutputStream is=ftpClient.put(fn);
    File file_out=new File(fn);
    FileOutputStream os=new
    FileOutputStream(file_out);
    byte[] bytes=new byte[1024];
    int c;
    while ((c=is.write(bytes))!=-1) {
       os.write(bytes,0,c);
    }
    is.close();
    os.close();
    ftpClient.closeServer();
   }catch(IOException e){
    a="粘贴失败!";
    result=false;   
   } */
   this.label1 .setText (a);
   this.showFileContents ();
  }
  else{
   result=false;  
  } 
  return result; 
 }

 /**
  *  show all the conten of the file list
  */
 public void showFileContents(){//其中的空当都是空格!
  StringBuffer buf=new StringBuffer();
  this.edit4.setText ("");
  try{
   this.ins=this.aftp.list ();//return the telnetinputstream
   while((this.ch=this.ins.read())>0){
    buf.append ((char)ch);//空当都 是空格    
   }
   this.edit4.setText(buf.toString());
   this.ins.close ();
   System.out.println ("showFileContents ins closed");
  }
  catch(IOException e){  
  }  
 }

 /**
  * 进入目录中
  */
 public void enterDiectory(String path){
  try{
   if (path.length()>0){
    this.aftp.cd(path); file://enter in the directory    
    this.showFileContents();
    if(path.equals("..") ){
     int pos=0;
     pos=this.currentPath.lastIndexOf("/");
     this.currentPath=this.currentPath.substring(0,pos);     
     pos=this.currentPath.lastIndexOf("/");
     this.currentPath=this.currentPath.substring (0,pos+1);
    }
    else
     this.currentPath=this.currentPath+path+"/";
    this.a="当前目录: "+this.currentPath;
    System.out.println ("this.currentPath: "+this.currentPath);
   }
  }
  catch(IOException e){
   this.a="无法进入目录: /"+path;   
  }
  finally{
   this.label1 .setText (this.a );    
  }
 }
 
 public void getFile(String filename){
  try {
   FtpClient ftpClient=new FtpClient();
   ftpClient.openServer(this.hostname);
   ftpClient.login(this.user, this.pwd);
   if (this.currentPath.length()!=0)
    ftpClient.cd(this.currentPath);
   ftpClient.binary();
   TelnetInputStream is=ftpClient.get(filename);
   File file_out=new File(filename);
   FileOutputStream os=new FileOutputStream(file_out);
   byte[] bytes=new byte[1024];
   int c;
   while ((c=is.read(bytes))!=-1) {
      os.write(bytes,0,c);
   }
   is.close();
   os.close();
   ftpClient.closeServer();   
  } catch (IOException ex) {;}

 }
 
 public void getFile(){
  String filename=this.edit5.getText();
  this.getFile(filename);   
 }
 
 /*
 public void setftpProxyHost(String ProxyHost,int ProxyPort){
  this.aftp.ftpProxyHost=ProxyHost;
  this.aftp.ftpProxyPort=ProxyPort;
  this.aftp.useFtpProxy=true;
 }*/
 
 /**
  * The main entry point for the application.
  *
  * @param args Array of parameters passed to the application
  * via the command line.
  */
 public static void main(String args[])
 {
  Application.run(new Ftp_Study());
 }
 
 class getFileThread extends Thread {
  public void run(){
   getFile();
   System.out.println ("getFile is completed");
  }       
 }
 
 class sendFileThread extends Thread {
  public void run(){   
   sendFile(selectFilePath);
   System.out.println ("sendFile is completed. ");
  }       
 }
 
 class enterDirectoryThread extends Thread {
  String szPath;
  
  public enterDirectoryThread(String path){
   this.szPath =path;
  }
  
  public void run(){
   enterDiectory(this.szPath);
   System.out.println ("enterDiectory is completed");
  }
 }
 
 class connectThread extends Thread {
  String hostname="";
  String uid="";
  String pwd="";
  
  public connectThread(String hostname1,String uid1,String pwd1){
   this.hostname=hostname1;
   this.uid=uid1;
   this.pwd =pwd1;
  }
  
  public void run(){
   connect(this.hostname,this.uid,this.pwd);
   System.out.println ("connect ... ");
  }       
 }
 
}

 

本人水平有限,望多指教。

本文地址:http://com.8s8s.com/it/it17869.htm