Java实现一个简单的FTP客户端

本文介绍了一个使用Java实现的FTP客户端Applet,该客户端具备连接FTP服务器、显示目录文件列表、上传文件等功能。通过GUI界面操作,用户可以轻松完成与FTP服务器的交互。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//FtpClientApplet.java
import sun.net.ftp.*;
import sun.net.*;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.io.*;

public class FtpClientApplet extends Applet
{
    FtpClient aftp;//实例化一个客户端对象
    DataOutputStream outputs ;//数据输出字符串
    TelnetInputStream ins;//Telnet输入字符串
    TelnetOutputStream outs;//Telnet输出字符串
    TextArea lsArea;//文本区域
    Label    LblPrompt;//标签提示
    Button   BtnConn;//连接主机按钮
    Button   BtnClose;//断开与主机的连接按钮
    Button   BtnQuit;//退出按钮
    TextField  TxtUID;//用户名输入区
    TextField  TxtPWD;//密码输入区
    TextField  TxtHost;//主机名输入区

    int ch;//读出的字符
    public String outFlagStr="没有连接主机";//提示给用户的标志字符,反应连接的状态
    String hostname="";//主机名称
    public void init () { //初始化函数
        setBackground(Color.white);
        setLayout(new GridBagLayout());//布局方式
        GridBagConstraints GBC = new GridBagConstraints();//布局容器
        LblPrompt = new Label("请连接主机");//初始化状态提示
        LblPrompt.setAlignment(Label.CENTER);//状态提示的位置

        BtnConn = new Button("连接");//初始化
        BtnClose = new Button("断开");//初始化
        BtnClose.enable(false);//初始化
        BtnQuit = new Button("退出");
        TxtUID = new TextField("anonymous",15);//初始化
        TxtPWD = new TextField("",15);//初始化
        TxtPWD.setEchoCharacter('*');//密码的显示方法
        TxtHost = new TextField("",20);//初始化
        Label LblGood = new Label("*********************************************");//初始化
        LblGood.setAlignment(Label.CENTER);
        Label LblGood1 = new Label("*********************************************");//初始化
        LblGood1.setAlignment(Label.CENTER);
        Label LblGetFile = new Label("获取的文件如下:");//初始化
        LblGetFile.setAlignment(Label.CENTER);
        Label LblUID = new Label("User ID:");//初始化
        Label LblPWD = new Label("PWD:");//初始化
        Label LblHost = new Label("Host:");//初始化

        lsArea = new TextArea(30,80);//初始化,30行,80列
        lsArea.setEditable(false);//不可编辑

        GBC.gridwidth= GridBagConstraints.REMAINDER;//添加第一行控件的前修饰
        ((GridBagLayout)getLayout()).setConstraints(LblGood,GBC);
        add(LblGood);

        GBC.gridwidth= GridBagConstraints.REMAINDER;//添加第一行控件
        GBC.fill     = GridBagConstraints.HORIZONTAL;
        ((GridBagLayout)getLayout()).setConstraints(LblPrompt,GBC);
        add(LblPrompt);

        GBC.gridwidth= GridBagConstraints.REMAINDER;//添加第一行控件的后修饰
        ((GridBagLayout)getLayout()).setConstraints(LblGood1,GBC);
        add(LblGood1);

        GBC.gridwidth=1; //添加第二行控件
        ((GridBagLayout)getLayout()).setConstraints(LblHost,GBC);
        add(LblHost);
        GBC.gridwidth=GridBagConstraints.REMAINDER;
        ((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=3;//把第三行剩余的空间平均分为三个,用来放剩下的三个按钮
        ((GridBagLayout)getLayout()).setConstraints(BtnConn,GBC);
        add(BtnConn);
        GBC.gridwidth=1;
        ((GridBagLayout)getLayout()).setConstraints(BtnClose,GBC);
        add(BtnClose);
        GBC.gridwidth=GridBagConstraints.REMAINDER;
        ((GridBagLayout)getLayout()).setConstraints(BtnQuit,GBC);
        add(BtnQuit);

        GBC.gridwidth= GridBagConstraints.REMAINDER;//添加第四行控件的前修饰
        ((GridBagLayout)getLayout()).setConstraints(LblGetFile,GBC);
        add(LblGetFile);

        GBC.gridwidth=GridBagConstraints.REMAINDER; //添加第四行控件
        GBC.fill = GridBagConstraints.HORIZONTAL;//当要下载的文件名过长时采取水平延伸显示区域的方式来存放
        ((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){
            outFlagStr="无权限与主机:"+hostname+"连接!";
            LblPrompt.setText(outFlagStr);
            return false;
        }
        catch (IOException e){
            outFlagStr="连接主机:"+hostname+"失败!";
            LblPrompt.setText(outFlagStr);
            return false;
        }
        catch(SecurityException e)
        {
            outFlagStr="无法与主机:"+hostname+"连接!用户名或密码错误!";
            LblPrompt.setText(outFlagStr);
            return false;
        }
        LblPrompt.setText("连接主机:"+hostname+"成功!");
        return true;
    }

    public void stop(){
        try{
            aftp.closeServer();//关闭与服务器的连接
        }
        catch(IOException e){
            outFlagStr="关闭与服务器:"+hostname+"的连接失败!";
            LblPrompt.setText(outFlagStr);
            return;
        }
    }

    public void paint(Graphics g){//图形类接口
    }

    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("与主机"+hostname+"连接已断开!");
            return true;
        }
        if (evt.target == BtnQuit){
            System.exit(0);
            return true;
        }
        return super.action(evt,obj);
    }

    public boolean sendFile(String filepathname){//发送文件,上传文件
        boolean result=true;
        if (aftp != null){
            LblPrompt.setText("正在粘贴文件,请耐心等待....");
            String  contentperline;
            try{
                outFlagStr="粘贴成功!";
                String fg =new  String("//");
                int index = filepathname.lastIndexOf(fg);
                String filename = filepathname.substring(index+1);
                File localFile ;
                localFile = new File(filepathname) ;
                RandomAccessFile sendFile = new RandomAccessFile(filepathname,"r");
//
                sendFile.seek(0);
                outs = aftp.put(filename);
                outputs = new DataOutputStream(outs);
                while (sendFile.getFilePointer() < sendFile.length() ){
                    ch = sendFile.read();
                    outputs.write(ch);
                }
                outs.close();
                sendFile.close();
            }
            catch(IOException e){
                outFlagStr = "粘贴失败!";
                result = false ;
            }
            LblPrompt.setText(outFlagStr);
            showFileContents();
        }
        else{
            result = false;
        }
        return result;
    }

    public void showFileContents(){//显示获取的ftp文件的内容
        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 e){
//            outFlagStr = "粘贴失败!";
        }
    }

    public static void main(String args[]){
        Frame f = new Frame("FTP Client--version 1.0 by cuiweibing--");
        f.addWindowListener(new WindowAdapter(){//添加关闭功能
            public void windowClosing(WindowEvent e){
                System.exit(0);
            }
        });

        FtpClientApplet ftp = new  FtpClientApplet();
        ftp.init();
        ftp.start();
        f.add(ftp);//把容器上的控件加到Frame
        f.pack();//显示
        f.setVisible(true);
    }

    public FtpClientApplet() {
        try {
            jbInit();
        }
        catch(Exception e) {
            e.printStackTrace();
        }
    }

    private void jbInit() throws Exception {
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值