`
border
  • 浏览: 206697 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

带有详细说明的FTP

阅读更多

带有详细说明的FTP使用sun.net.ftp包下的api,
package jing.upfile;


import sun.net.ftp.*;
import sun.net.*;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ByteArrayOutputStream;
import java.util.ArrayList;
import java.util.StringTokenizer;

/**
    FTP远程命令列表<br>
USER    PORT    RETR    ALLO    DELE    SITE    XMKD    CDUP    FEAT<br>
PASS    PASV    STOR    REST    CWD     STAT    RMD     XCUP    OPTS<br>
ACCT    TYPE    APPE    RNFR    XCWD    HELP    XRMD    STOU    AUTH<br>
REIN    STRU    SMNT    RNTO    LIST    NOOP    PWD     SIZE    PBSZ<br>
QUIT    MODE    SYST    ABOR    NLST    MKD     XPWD    MDTM    PROT<br>
     在服务器上执行命令,如果用sendServer来执行远程命令(不能执行本地FTP命令)的话,所有FTP命令都要加上\r\n<br>
          ftpclient.sendServer("XMKD /test/bb\r\n"); //执行服务器上的FTP命令<br>
          ftpclient.readServerResponse一定要在sendServer后调用<br>
          nameList("/test")获取指目录下的文件列表<br>
          XMKD建立目录,当目录存在的情况下再次创建目录时报错<br>
          XRMD删除目录<br>
          DELE删除文件<br>
* <p>Title: 使用JAVA操作FTP服务器(FTP客户端)</p>
* <p>Description: 上传文件的类型及文件大小都放到调用此类的方法中去检测,比如放到前台JAVASCRIPT中去检测等
* 针对FTP中的所有调用使用到文件名的地方请使用完整的路径名(绝对路径开始)。
* </p>
* <p>Copyright: Copyright (c) 2005</p>
* <p>Company: 静靖工作室</p>
* @author 欧朝敬  13873195792
* @version 1.0
*/

public class FtpUpfile {
    private FtpClient ftpclient;
    private String ipAddress;
    private int ipPort;
    private String userName;
    private String PassWord;
    /**
     * 构造函数
     * @param ip String 机器IP
     * @param port String 机器FTP端口号
     * @param username String FTP用户名
     * @param password String FTP密码
     * @throws Exception
     */
    public FtpUpfile(String ip, int port, String username, String password) throws
            Exception {
        ipAddress = new String(ip);
        ipPort = port;
        ftpclient = new FtpClient(ipAddress, ipPort);
        //ftpclient = new FtpClient(ipAddress);
        userName = new String(username);
        PassWord = new String(password);
    }

    /**
     * 构造函数
     * @param ip String 机器IP,默认端口为21
     * @param username String FTP用户名
     * @param password String FTP密码
     * @throws Exception
     */
    public FtpUpfile(String ip, String username, String password) throws
            Exception {
        ipAddress = new String(ip);
        ipPort = 21;
        ftpclient = new FtpClient(ipAddress, ipPort);
        //ftpclient = new FtpClient(ipAddress);
        userName = new String(username);
        PassWord = new String(password);
    }


    /**
     * 登录FTP服务器
     * @throws Exception
     */
    public void login() throws Exception {
        ftpclient.login(userName, PassWord);
    }

    /**
     * 退出FTP服务器
     * @throws Exception
     */
    public void logout() throws Exception {
        //用ftpclient.closeServer()断开FTP出错时用下更语句退出
        ftpclient.sendServer("QUIT\r\n");
        int reply = ftpclient.readServerResponse(); //取得服务器的返回信息
    }

    /**
     * 在FTP服务器上建立指定的目录,当目录已经存在的情下不会影响目录下的文件,这样用以判断FTP
     * 上传文件时保证目录的存在目录格式必须以"/"根目录开头
     * @param pathList String
     * @throws Exception
     */
    public void buildList(String pathList) throws Exception {
        ftpclient.ascii();
        StringTokenizer s = new StringTokenizer(pathList, "/"); //sign
        int count = s.countTokens();
        String pathName = "";
        while (s.hasMoreElements()) {
            pathName = pathName + "/" + (String) s.nextElement();
            try {
                ftpclient.sendServer("XMKD " + pathName + "\r\n");
            } catch (Exception e) {
                e = null;
            }
            int reply = ftpclient.readServerResponse();
        }
        ftpclient.binary();
    }

    /**
     * 取得指定目录下的所有文件名,不包括目录名称
     * 分析nameList得到的输入流中的数,得到指定目录下的所有文件名
     * @param fullPath String
     * @return ArrayList
     * @throws Exception
     */
    public ArrayList fileNames(String fullPath) throws Exception {
        ftpclient.ascii(); //注意,使用字符模式
        TelnetInputStream list = ftpclient.nameList(fullPath);
        byte[] names = new byte[2048];
        int bufsize = 0;
        bufsize = list.read(names, 0, names.length); //从流中读取
        list.close();
        ArrayList namesList = new ArrayList();
        int i = 0;
        int j = 0;
        while (i < bufsize /*names.length*/) {
            //char bc = (char) names;
            //System.out.println(i + "  " + bc + " : " + (int) names);
            //i = i + 1;
            if (names == 10) { //字符模式为10,二进制模式为13
                //文件名在数据中开始下标为j,i-j为文件名的长度,文件名在数据中的结束下标为i-1
                //System.out.write(names, j, i - j);
                //System.out.println(j + "   " + i + "    " + (i - j));
                String tempName = new String(names, j, i - j);
                namesList.add(tempName);
                //System.out.println(temp);
                // 处理代码处
                //j = i + 2; //上一次位置二进制模式
                j = i + 1; //上一次位置字符模式
            }
            i = i + 1;
        }
        return namesList;
    }

    /**
     * 上传文件到FTP服务器,destination路径以FTP服务器的"/"开始,带文件名、
     * 上传文件只能使用二进制模式,当文件存在时再次上传则会覆盖
     * @param source String
     * @param destination String
     * @throws Exception
     */
    public void upFile(String source, String destination) throws Exception {
        buildList(destination.substring(0, destination.lastIndexOf("/")));
        ftpclient.binary(); //此行代码必须放在buildList之后
        TelnetOutputStream ftpOut = ftpclient.put(destination);
        TelnetInputStream ftpIn = new TelnetInputStream(new
                FileInputStream(source), true);
        byte[] buf = new byte[204800];
        int bufsize = 0;
        while ((bufsize = ftpIn.read(buf, 0, buf.length)) != -1) {
            ftpOut.write(buf, 0, bufsize);
        }
        ftpIn.close();
        ftpOut.close();

    }


    /**
     * JSP中的流上传到FTP服务器,
     * 上传文件只能使用二进制模式,当文件存在时再次上传则会覆盖
     * 字节数组做为文件的输入流,此方法适用于JSP中通过
     * request输入流来直接上传文件在RequestUpload类中调用了此方法,
     * destination路径以FTP服务器的"/"开始,带文件名
     * @param sourceData byte[]
     * @param destination String
     * @throws Exception
     */
    public void upFile(byte[] sourceData, String destination) throws Exception {
        buildList(destination.substring(0, destination.lastIndexOf("/")));
        ftpclient.binary(); //此行代码必须放在buildList之后
        TelnetOutputStream ftpOut = ftpclient.put(destination);
        ftpOut.write(sourceData, 0, sourceData.length);
//        ftpOut.flush();
        ftpOut.close();
    }

    /**
     * 从FTP文件服务器上下载文件SourceFileName,到本地destinationFileName
     * 所有的文件名中都要求包括完整的路径名在内
     * @param SourceFileName String
     * @param destinationFileName String
     * @throws Exception
     */
    public void downFile(String SourceFileName, String destinationFileName) throws
            Exception {
        ftpclient.binary(); //一定要使用二进制模式
        TelnetInputStream ftpIn = ftpclient.get(SourceFileName);
        byte[] buf = new byte[204800];
        int bufsize = 0;
        FileOutputStream ftpOut = new FileOutputStream(destinationFileName);
        while ((bufsize = ftpIn.read(buf, 0, buf.length)) != -1) {
            ftpOut.write(buf, 0, bufsize);
        }
        ftpOut.close();
        ftpIn.close();
    }

    /**
     *从FTP文件服务器上下载文件,输出到字节数组中
     * @param SourceFileName String
     * @return byte[]
     * @throws Exception
     */
    public byte[] downFile(String SourceFileName) throws
            Exception {
        ftpclient.binary(); //一定要使用二进制模式
        TelnetInputStream ftpIn = ftpclient.get(SourceFileName);
        ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
        byte[] buf = new byte[204800];
        int bufsize = 0;

        while ((bufsize = ftpIn.read(buf, 0, buf.length)) != -1) {
            byteOut.write(buf, 0, bufsize);
        }
        byte[] return_arraybyte = byteOut.toByteArray();
        byteOut.close();
        ftpIn.close();
        return return_arraybyte;
    }

    /**调用示例
     * FtpUpfile fUp = new FtpUpfile("192.150.189.22", 21, "admin", "admin");
     * fUp.login();
     * fUp.buildList("/adfadsg/sfsdfd/cc");
     * String destination = "/test.zip";
     * fUp.upFile("C:\\Documents and Settings\\Administrator\\My Documents\\sample.zip",destination);
     * ArrayList filename = fUp.fileNames("/");
     * for (int i = 0; i < filename.size(); i++) {
     *     System.out.println(filename.get(i).toString());
     * }
     * fUp.logout();
     * @param args String[]
     * @throws Exception
     */
    public static void main(String[] args) throws Exception {
        FtpUpfile fUp = new FtpUpfile("192.150.189.22", 21, "admin", "admin");
        fUp.login();
        /*        fUp.buildList("/adfadsg/sfsdfd/cc");
                String destination = "/test/SetupDJ.rar";
                fUp.upFile(
         "C:\\Documents and Settings\\Administrator\\My Documents\\SetupDJ.rar",
                        destination);
                ArrayList filename = fUp.fileNames("/");
                for (int i = 0; i < filename.size(); i++) {
                    System.out.println(filename.get(i).toString());
                }

                fUp.downFile("/sample.zip", "d:\\sample.zip");
         */
        FileInputStream fin = new FileInputStream(
                "C:\\Documents and Settings\\Administrator\\My Documents\\SetupDJ.exe");
        byte[] data = new byte[20480000];
        fin.read(data, 0, data.length);
        fUp.upFile(data, "/test/SetupDJ.exe");
        fUp.logout();
        System.out.println("程序运行完成!");
        /*FTP远程命令列表
         USER    PORT    RETR    ALLO    DELE    SITE    XMKD    CDUP    FEAT
         PASS    PASV    STOR    REST    CWD     STAT    RMD     XCUP    OPTS
         ACCT    TYPE    APPE    RNFR    XCWD    HELP    XRMD    STOU    AUTH
         REIN    STRU    SMNT    RNTO    LIST    NOOP    PWD     SIZE    PBSZ
         QUIT    MODE    SYST    ABOR    NLST    MKD     XPWD    MDTM    PROT
         */
        /*在服务器上执行命令,如果用sendServer来执行远程命令(不能执行本地FTP命令)的话,所有FTP命令都要加上\r\n
         ftpclient.sendServer("XMKD /test/bb\r\n"); //执行服务器上的FTP命令
         ftpclient.readServerResponse一定要在sendServer后调用
         nameList("/test")获取指目录下的文件列表
         XMKD建立目录,当目录存在的情况下再次创建目录时报错
         XRMD删除目录
         DELE删除文件
         */
    }
}

     http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=124&threadID=24694&tstart=0



分享到:
评论

相关推荐

    一个java的带有详细说明的FTP

    一个java的带有详细说明的FTP,一个java的带有详细说明的FTP

    SlimFTPd最小的FTP附带使用说明

    标题中的“SlimFTPd最小的FTP附带使用说明”揭示了我们要讨论的核心内容——SlimFTPd,这是一个轻量级的FTP服务器软件。FTP(File Transfer Protocol)是互联网上用于文件传输的标准协议,而SlimFTPd则以其小巧的...

    java 实现FTP 服务器和客户端,带有使用说明

    FTP是一种用于在互联网上传输文件的标准协议,而用Java来实现FTP服务则需要对TCP/IP协议栈有深入理解。 1. **Java Socket编程**: Java的Socket类提供了网络通信的基础,它是TCP/IP协议的Java接口。在FTP服务器端...

    加密FTP备份说明

    ### 加密FTP备份说明知识点详述 #### 一、FTP备份概述 FTP(File Transfer Protocol)备份是一种通过FTP协议将本地文件传输到远程服务器进行备份的方法。这种方式不仅可以提高数据的安全性,还可以有效利用网络...

    Ftp在线注册管理系统源码_webftp.zip

    10. **文档和示例**:良好的源码应当配有详尽的使用说明和示例,帮助开发者理解和部署系统。 通过深入理解并分析这个`webftp.zip`源码包,开发者可以学习到FTP服务管理、Web开发、数据库操作、安全编程等方面的知识...

    Android FTP 上传/下载 带进度条精简DEMO

    本DEMO展示了如何在Android应用中实现FTP上传和下载功能,并且带有进度条显示,提高了用户体验。以下是对这个DEMO中涉及的技术点的详细说明: 1. **FTPClient库的使用**: - `commons-net-3.1` 是Apache Commons ...

    ftp相关——介绍ftp客户端编程及服务器编程(附源代码)

    各自相关的说明文档都有。你可以方便地使 用它进行文件的传输,常用的ftp命令都支 持。 对于ftp服务器,你也可以使用系统自带的ftp 客户端进行登录,我测试过,运行良好;你也可 以用我的这个ftp客户端程序,来方便...

    VB实现FTP功能程序源码

    【程序老媛出品,必属精品,亲测校正,质量保证】 资源名:VB实现FTP功能程序源码 ...源码说明: 基于vb写的实现ftp功能的程序源码 包含完整代码和注释 非常适合借鉴学习 适合人群:新手及有一定经验的开发人员

    linux ftp 命令说明

    本文将详细介绍Linux环境下FTP客户端的基本命令及其功能,适用于初学者的基础学习。 #### 1. 基本命令及功能介绍 - **`ftp-v-d-i-n-g[]`** - `-v`:显示远程服务器的所有响应信息。 - `-d`:使用调试模式。 - `...

    FTP.rar_FTP服务器

    在压缩包`FTP.rar`中,`FTP.doc`可能是详细的FTP服务器设置教程文档,涵盖上述步骤的详细说明和可能遇到的问题解决方案。`www.pudn.com.txt`可能是来源于PUDN网站的一个文本文件,可能包含FTP相关的链接、资源或补充...

    java版FTP文件管理程序

    5. **使用说明**:程序附带的详细使用说明可能涵盖了如何配置FTP服务器信息、如何连接服务器、如何执行文件操作(如上传、下载、重命名、删除)以及如何处理可能出现的异常情况。 6. **多线程编程**:为了提高效率...

    易网主机针对Linux主机登陆FTP目录的相关说明_DA面板专用

    本文将针对易网主机的Linux虚拟主机服务,详细说明如何通过FTP客户端连接到服务器以及解析主要目录的用途,帮助用户避免误操作导致的网站访问问题。 首先,登录易网主机网站(https://www.34514.cn),进入用户管理...

    zOS FTP transfer procedure

    - `PUT 'ebcdic-file' 'ascii-crlf-file'`: 将EBCDIC文件转换为带有CR/LF的ASCII文件。 接下来,再次处理这个带有CR/LF的ASCII文件,去除文件末尾的这两个字符: - `SITELRECL=90(new receive file lrecl is 90-...

    WebFTP ActiveX

    6. **使用说明**:`use.txt`文件可能包含了如何在网页中使用WebFTP ActiveX控件的指南,开发者可以参考这份文档来集成和配置控件。 7. **文件列表**:`WebFTP.ocx`是实际的ActiveX控件文件,需要在服务器上部署并...

    FTP服务器程序

    这些服务器带有可读写的目录。 Trojan木马经常感染的端口。  端口:23  服务:Telnet 说明:远程登录(TCP/IP的网络登陆和仿真程序),入侵者可通过登陆控制系统的服务。大多数情况下扫描这一端口是为了找到机器...

    Eclipse FTP插件 - Sexftp 支持FTP上传、下载、比较等功能

    •安装简单,带有一个安装程序,无任何依赖包,不与其他插件冲突。 环境说明JDK版本: 1.5及以上。 ECLIPSE版本:3.5(Myeclipse版本需8.5及以上) 操作系统:windows (unix下未测试验证) 项目地址...

    Eclipse FTP 插件 Sexftp

    说明:简单实现了FTP上传功能,可装在Eclipse3.5以上,Myclipse 8.5 以上版本。Jdk版本1.5以上。 简介: 1、可轻松将eclipse中的项目上传到FTP生产环境服务器上,省去来回切换工具的麻烦。 2、根据设定好的基准目录...

    《计算机网络》课程设计说明书-FTP文件传输的实现.doc

    - **需求说明**:详细阐述FTP的基本概念,包括其工作原理和两种工作模式。 - **设计说明**:分析设计的难点和关键点,概述总体设计思路。 - **详细算法描述**:描述实现FTP功能所用到的数据结构和算法。 - **源程序...

    Notepad++6.5.4(带FTP插件版)

    `readme.txt`是软件的使用指南,可能包含了安装说明、快速启动指南以及开发者的信息。对于初次接触Notepad++的用户来说,这是一个非常有价值的资源。 `langs.model.xml`、`stylers.model.xml`、`functionList.xml`...

Global site tag (gtag.js) - Google Analytics