免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1151 | 回复: 0
打印 上一主题 下一主题

JAVA中使用FTPClient上传下载 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-07-10 13:27 |只看该作者 |倒序浏览
在JAVA程序中,经常需要和FTP打交道,比如向FTP服务器上传文件、下载文件,本文简单介绍如何利用jakarta commons中的FTPClient(在commons-net包中)实现上传下载文件。

一、上传文件

         原理就不介绍了,大家直接看代码吧
  1. /**
  2.      * Description: 向FTP服务器上传文件
  3.      * @Version1.0 Jul 27, 2008 4:31:09 PM by 崔红保(cuihongbao@d-heaven.com)创建
  4.      * @param url FTP服务器hostname
  5.      * @param port FTP服务器端口
  6.      * @param username FTP登录账号
  7.      * @param password FTP登录密码
  8.      * @param path FTP服务器保存目录
  9.      * @param filename 上传到FTP服务器上的文件名
  10.      * @param input 输入流
  11.      * @return 成功返回true,否则返回false
  12.      */
  13.     public static boolean uploadFile(String url,int port,String username, String password, String path, String filename, InputStream input) {
  14.         boolean success = false;
  15.         FTPClient ftp = new FTPClient();
  16.         try {
  17.             int reply;
  18.             ftp.connect(url, port);//连接FTP服务器
  19.             //如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器
  20.             ftp.login(username, password);//登录
  21.             reply = ftp.getReplyCode();
  22.             if (!FTPReply.isPositiveCompletion(reply)) {
  23.                 ftp.disconnect();
  24.                 return success;
  25.             }
  26.             ftp.changeWorkingDirectory(path);
  27.             ftp.storeFile(filename, input);            
  28.             
  29.             input.close();
  30.             ftp.logout();
  31.             success = true;
  32.         } catch (IOException e) {
  33.             e.printStackTrace();
  34.         } finally {
  35.             if (ftp.isConnected()) {
  36.                 try {
  37.                     ftp.disconnect();
  38.                 } catch (IOException ioe) {
  39.                 }
  40.             }
  41.         }
  42.         return success;
  43.     }<pre></pre>
复制代码
下面我们写两个小例子:

1.将本地文件上传到FTP服务器上,代码如下:
  1. @Test
  2.     public void testUpLoadFromDisk(){
  3.         try {
  4.             FileInputStream in=new FileInputStream(new File("D:/test.txt"));
  5.             boolean flag = uploadFile("127.0.0.1", 21, "test", "test", "D:/ftp", "test.txt", in);
  6.             System.out.println(flag);
  7.         } catch (FileNotFoundException e) {
  8.             e.printStackTrace();
  9.         }
  10.     }<pre></pre>
复制代码
2.在FTP服务器上生成一个文件,并将一个字符串写入到该文件中
  1. @Test
  2.     public void testUpLoadFromString(){
  3.         try {
  4.             InputStream input = new ByteArrayInputStream("test ftp".getBytes("utf-8"));
  5.             boolean flag = uploadFile("127.0.0.1", 21, "test", "test", "D:/ftp", "test.txt", input);
  6.             System.out.println(flag);
  7.         } catch (UnsupportedEncodingException e) {
  8.             e.printStackTrace();
  9.         }
  10.     }<pre></pre>
复制代码
二、下载文件

       从FTP服务器下载文件的代码也很简单,参考如下:
  1. /**
  2.      * Description: 从FTP服务器下载文件
  3.      * @Version1.0 Jul 27, 2008 5:32:36 PM by 崔红保(cuihongbao@d-heaven.com)创建
  4.      * @param url FTP服务器hostname
  5.      * @param port FTP服务器端口
  6.      * @param username FTP登录账号
  7.      * @param password FTP登录密码
  8.      * @param remotePath FTP服务器上的相对路径
  9.      * @param fileName 要下载的文件名
  10.      * @param localPath 下载后保存到本地的路径
  11.      * @return
  12.      */
  13.     public static boolean downFile(String url, int port,String username, String password, String remotePath,String fileName,String localPath) {
  14.         boolean success = false;
  15.         FTPClient ftp = new FTPClient();
  16.         try {
  17.             int reply;
  18.             ftp.connect(url, port);
  19.             //如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器
  20.             ftp.login(username, password);//登录
  21.             reply = ftp.getReplyCode();
  22.             if (!FTPReply.isPositiveCompletion(reply)) {
  23.                 ftp.disconnect();
  24.                 return success;
  25.             }
  26.             ftp.changeWorkingDirectory(remotePath);//转移到FTP服务器目录
  27.             FTPFile[] fs = ftp.listFiles();
  28.             for(FTPFile ff:fs){
  29.                 if(ff.getName().equals(fileName)){
  30.                     File localFile = new File(localPath+"/"+ff.getName());
  31.                     
  32.                     OutputStream is = new FileOutputStream(localFile);
  33.                     ftp.retrieveFile(ff.getName(), is);
  34.                     is.close();
  35.                 }
  36.             }
  37.             
  38.             ftp.logout();
  39.             success = true;
  40.         } catch (IOException e) {
  41.             e.printStackTrace();
  42.         } finally {
  43.             if (ftp.isConnected()) {
  44.                 try {
  45.                     ftp.disconnect();
  46.                 } catch (IOException ioe) {
  47.                 }
  48.             }
  49.         }
  50.         return success;
  51.     }
复制代码
转载出处:http://www.cnblogs.com/liuyitian/p/4635302.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP