apcahce的comonns中有一个net包。
里面有ftpclient处理一般的上传和下载很容易。

解决方案 »

  1.   


    package jdeveloper.ftp;import java.applet.Applet;
    import java.awt.*;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import java.io.*;
    import sun.net.TelnetInputStream;
    import sun.net.TelnetOutputStream;
    import sun.net.ftp.FtpClient;
    import sun.net.ftp.FtpLoginException;public class FtpApplet extends Applet
    {    FtpClient aftp;
        DataOutputStream outputs;
        TelnetInputStream ins;
        TelnetOutputStream outs;
        TextArea lsArea;
        Label LblPrompt;
        Button BtnConn;
        Button BtnClose;
        TextField TxtUID;
        TextField TxtPWD;
        TextField TxtHost;
        int ch;
        public String a;
        String hostname;    public FtpApplet()
        {
            a = "没有连接主机";
            hostname = "";
        }    public void init()
        {
            setBackground(Color.white);
            setLayout(new GridBagLayout());
            GridBagConstraints GBC = new GridBagConstraints();
            LblPrompt = new Label("没有连接主机");
            LblPrompt.setAlignment(0);
            BtnConn = new Button("连接");
            BtnClose = new Button("断开");
            BtnClose.enable(false);
            TxtUID = new TextField("", 15);
            TxtPWD = new TextField("", 15);
            TxtPWD.setEchoCharacter('*');
            TxtHost = new TextField("", 20);
            Label LblUID = new Label("User ID:");
            Label LblPWD = new Label("PWD:");
            Label LblHost = new Label("Host:");
            lsArea = new TextArea(30, 80);
            lsArea.setEditable(false);
            GBC.gridwidth = 0;
            GBC.fill = 2;
            ((GridBagLayout)getLayout()).setConstraints(LblPrompt, GBC);
            add(LblPrompt);
            GBC.gridwidth = 1;
            ((GridBagLayout)getLayout()).setConstraints(LblHost, GBC);
            add(LblHost);
            GBC.gridwidth = 0;
            ((GridBagLayout)getLayout()).setConstraints(TxtHost, GBC);
            add(TxtHost);
            GBC.gridwidth = 1;
            ((GridBagLayout)getLayout()).setConstraints(LblUID, GBC);
            add(LblUID);
            GBC.gridwidth = 1;
            ((GridBagLayout)getLayout()).setConstraints(TxtUID, GBC);
            add(TxtUID);
            GBC.gridwidth = 1;
            ((GridBagLayout)getLayout()).setConstraints(LblPWD, GBC);
            add(LblPWD);
            GBC.gridwidth = 1;
            ((GridBagLayout)getLayout()).setConstraints(TxtPWD, GBC);
            add(TxtPWD);
            GBC.gridwidth = 1;
            GBC.weightx = 2D;
            ((GridBagLayout)getLayout()).setConstraints(BtnConn, GBC);
            add(BtnConn);
            GBC.gridwidth = 0;
            ((GridBagLayout)getLayout()).setConstraints(BtnClose, GBC);
            add(BtnClose);
            GBC.gridwidth = 0;
            GBC.fill = 2;
            ((GridBagLayout)getLayout()).setConstraints(lsArea, GBC);
            add(lsArea);
        }    public boolean connect(String hostname, String uid, String pwd)
        {
            this.hostname = hostname;
            LblPrompt.setText("正在连接,请等待.....");
            try
            {
                aftp = new FtpClient(hostname);
                aftp.login(uid, pwd);
                aftp.binary();
                showFileContents();
            }
            catch(FtpLoginException e)
            {
                a = String.valueOf((new StringBuffer("无权限与主机:")).append(hostname).append("连接!"));
                LblPrompt.setText(a);
                boolean flag = false;
                return flag;
            }
            catch(IOException e)
            {
                a = String.valueOf((new StringBuffer("连接主机:")).append(hostname).append("失败!"));
                LblPrompt.setText(a);
                boolean flag1 = false;
                return flag1;
            }
            catch(SecurityException e)
            {
                a = String.valueOf((new StringBuffer("无权限与主机:")).append(hostname).append("连接!"));
                LblPrompt.setText(a);
                boolean flag2 = false;
                return flag2;
            }
            LblPrompt.setText(String.valueOf((new StringBuffer("连接主机:")).append(hostname).append("成功!")));
            return true;
        }    public void stop()
        {
            try
            {
                aftp.closeServer();
            }
            catch(IOException ioexception) { }
        }    public void paint(Graphics g1)
        {
        }    public boolean action(Event evt, Object obj)
        {
            if(evt.target == BtnConn)
            {
                LblPrompt.setText("正在连接,请等待.....");
                if(connect(TxtHost.getText(), TxtUID.getText(), TxtPWD.getText()))
                {
                    BtnConn.setEnabled(false);
                    BtnClose.setEnabled(true);
                }
                return true;
            }
            if(evt.target == BtnClose)
            {
                stop();
                BtnConn.enable(true);
                BtnClose.enable(false);
                LblPrompt.setText(String.valueOf((new StringBuffer("与主机")).append(hostname).append("连接已断开!")));
                return true;
            } else
            {
                return super.action(evt, obj);
            }
        }    public boolean sendFile(String filepathname)
        {
            boolean result = true;
            if(aftp != null)
            {
                LblPrompt.setText("正在粘贴文件,请耐心等待....");
                try
                {
                    a = "粘贴成功!";
                    String fg = new String("\\");
                    int index = filepathname.lastIndexOf(fg);
                    String filename = filepathname.substring(index + 1);
                    File localFile = new File(filepathname);
                    RandomAccessFile sendFile = new RandomAccessFile(filepathname, "r");
                    sendFile.seek(0L);
                    outs = aftp.put(filename);
                    outputs = new DataOutputStream(outs);
                    for(; sendFile.getFilePointer() < sendFile.length(); outputs.write(ch))
                        ch = sendFile.read();                outs.close();
                    sendFile.close();
                }
                catch(IOException e)
                {
                    a = "粘贴失败!";
                    result = false;
                }
                LblPrompt.setText(a);
                showFileContents();
            } else
            {
                result = false;
            }
            return result;
        }    public void showFileContents()
        {
            StringBuffer buf = new StringBuffer();
            lsArea.setText("");
            try
            {
                ins = aftp.list();
                while((ch = ins.read()) >= 0) 
                    buf.append((char)ch);
                lsArea.appendText(buf.toString());
                ins.close();
            }
            catch(IOException ioexception) { }
        }    public static void main(String args[])
        {
            Frame f = new Frame("FTP Client");
            f.addWindowListener(new WindowAdapter() {            public void windowClosing(WindowEvent e)
                {
                    System.exit(0);
                }        });
            FtpApplet ftp = new FtpApplet();
            ftp.init();
            ftp.start();
            f.add(ftp);
            f.pack();
            f.setVisible(true);
        }
    }