JAVA中使用FTPClient实现文件上传下载

来源:互联网 发布:网络教学信息技术应用 编辑:程序博客网 时间:2024/06/06 09:59
在JAVA程序中,经常需要和FTP打交道,比如向FTP服务器上传文件、下载文件,本文简单介绍如何利用jakarta commons中的FTPClient(在commons-net包中)实现上传下载文件。
  1. 所用到的jar包有:
  2. commons-net-1.4.1.jar
  3. jakarta-oro.jar
一、上传文件
    文件上传源代码                  /**            * Description: 向FTP服务器上传文件            * @Version1.0            * @param url FTP服务器hostname            * @param port FTP服务器端口            * @param username FTP登录账号            * @param password FTP登录密码            * @param path FTP服务器保存目录            * @param filename 上传到FTP服务器上的文件名            * @param input 输入流            * @return 成功返回true,否则返回false            */            public static boolean uploadFile(                  String url,//FTP服务器hostname                   int port,//FTP服务器端口                  String username, // FTP登录账号                   String password, //FTP登录密码                  String path, //FTP服务器保存目录                  String filename, //上传到FTP服务器上的文件名                   InputStream input // 输入流                   ) {                boolean success = false;                FTPClient ftp = new FTPClient();                try {                    int reply;                    ftp.connect(url, port);//连接FTP服务器                     //如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器                     ftp.login(username, password);//登录                     reply = ftp.getReplyCode();                    if (!FTPReply.isPositiveCompletion(reply)) {                        ftp.disconnect();                        return success;                    }                    ftp.changeWorkingDirectory(path);                    ftp.storeFile(filename, input);                                                 input.close();                    ftp.logout();                    success = true;                } catch (IOException e) {                    e.printStackTrace();                } finally {                    if (ftp.isConnected()) {                        try {                            ftp.disconnect();                        } catch (IOException ioe) {                        }                    }                }                return success;            }   
以下是文件上传的测试用例:
    /**       * 将本地文件上传到FTP服务器上       *       */      public void testUpLoadFromDisk(){            try {                FileInputStream in=new FileInputStream(new File("D:/test.txt"));                boolean flag = uploadFile("127.0.0.1", 21, "administrator", "zyuc2011", "test", "test.txt", in);                System.out.println(flag);            } catch (FileNotFoundException e) {                e.printStackTrace();            }         }  
    /**       * 在FTP服务器上生成一个文件,并将一个字符串写入到该文件中       *       */      public void testUpLoadFromString(){            try {                String str = "这是要写入的字符串!";              InputStream input = new ByteArrayInputStream(str.getBytes("utf-8"));                boolean flag = uploadFile("127.0.0.1", 21, "administrator", "zyuc2011", "test", "test.txt", input);                System.out.println(flag);            } catch (UnsupportedEncodingException e) {                e.printStackTrace();            }        }  
二、文件下载
文件下载源代码      /**        * Description: 从FTP服务器下载文件        * @Version1.0        * @param url FTP服务器hostname        * @param port FTP服务器端口        * @param username FTP登录账号        * @param password FTP登录密码        * @param remotePath FTP服务器上的相对路径        * @param fileName 要下载的文件名        * @param localPath 下载后保存到本地的路径        * @return        */        public static boolean downFile(              String url, //FTP服务器hostname              int port,//FTP服务器端口              String username, //FTP登录账号              String password, //FTP登录密码              String remotePath,//FTP服务器上的相对路径               String fileName,//要下载的文件名              String localPath//下载后保存到本地的路径              ) {            boolean success = false;            FTPClient ftp = new FTPClient();            try {                int reply;                ftp.connect(url, port);                //如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器                 ftp.login(username, password);//登录                 reply = ftp.getReplyCode();                if (!FTPReply.isPositiveCompletion(reply)) {                    ftp.disconnect();                    return success;                }                ftp.changeWorkingDirectory(remotePath);//转移到FTP服务器目录                 FTPFile[] fs = ftp.listFiles();                for(FTPFile ff:fs){                    if(ff.getName().equals(fileName)){                        File localFile = new File(localPath+"/"+ff.getName());                        OutputStream is = new FileOutputStream(localFile);                         ftp.retrieveFile(ff.getName(), is);                        is.close();                    }                }                                ftp.logout();                success = true;            } catch (IOException e) {                e.printStackTrace();            } finally {                if (ftp.isConnected()) {                    try {                        ftp.disconnect();                    } catch (IOException ioe) {                    }                }            }            return success;        }  
以下是文件下载的测试用例:
    /**       * 将FTP服务器上文件下载到本地       *       */      public void testDownFile(){          try {                boolean flag = downFile("127.0.0.1", 21, "administrator", "zyuc2011", "test", "test.txt", "D:/");                System.out.println(flag);            } catch (Exception e) {                e.printStackTrace();            }             }