在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. input.close();
  29. ftp.logout();
  30. success = true;
  31. } catch (IOException e) {
  32. e.printStackTrace();
  33. } finally {
  34. if (ftp.isConnected()) {
  35. try {
  36. ftp.disconnect();
  37. } catch (IOException ioe) {
  38. }
  39. }
  40. }
  41. return success;
  42. }<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. OutputStream is = new FileOutputStream(localFile);
    32. ftp.retrieveFile(ff.getName(), is);
    33. is.close();
    34. }
    35. }
    36. ftp.logout();
    37. success = true;
    38. } catch (IOException e) {
    39. e.printStackTrace();
    40. } finally {
    41. if (ftp.isConnected()) {
    42. try {
    43. ftp.disconnect();
    44. } catch (IOException ioe) {
    45. }
    46. }
    47. }
    48. return success;
    49. }<pre></pre>

java FTP 上传下载删除文件的更多相关文章

  1. 通过代码链接ftp上传下载删除文件

    因为我的项目是Maven项目,首先要导入一个Maven库里的包:pom.xml <dependency>            <groupId>com.jcraft</ ...

  2. Java.ftp上传下载

    1:jar的maven的引用: 1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="ht ...

  3. Win10 搭建FTP环境,并使用Java实现上传,下载,删除

    测试的环境一般都是在自己电脑上面装的,现在一般都使用Win10开发 搭建FTP: 第一步:打开控制面板:点击程序 第二步: 第三步: 然后点击确认后等待完成 完成后在启动中找到IIS管理器 打开 在网 ...

  4. java 通过sftp服务器上传下载删除文件

    最近做了一个sftp服务器文件下载的功能,mark一下: 首先是一个SftpClientUtil 类,封装了对sftp服务器文件上传.下载.删除的方法 import java.io.File; imp ...

  5. C#WPF做FTP上传下载获取文件列表

    Xaml.cs: using Microsoft.Win32;using System;using System.Collections.Generic;using System.IO;using S ...

  6. java Ftp上传创建多层文件的代码片段

    StringBuilder sBuilder = new StringBuilder();            String[] pah = path.split("/");   ...

  7. FastDfs java客户端上传、删除文件

    #配置文件 connect_timeout = 2 network_timeout = 30 charset = UTF-8 http.tracker_http_port = 9090 http.an ...

  8. java客户端调用ftp上传下载文件

    1:java客户端上传,下载文件. package com.li.utils; import java.io.File; import java.io.FileInputStream; import ...

  9. JAVA 实现FTP上传下载(sun.net.ftp.FtpClient)

    package com.why.ftp; import java.io.DataInputStream; import java.io.File; import java.io.FileInputSt ...

随机推荐

  1. npm使用常见问题及注意事项

    1.npm.cnpm.yarn不要混用,一个项目只使用一个 2.NPM problem: npm ERR! extraneous 表明安装了很多不需要的三方包 使用命令 npm prune删除无用的包 ...

  2. ES6笔记之参数默认值(译)

    原文链接:http://dmitrysoshnikov.com/ 原文作者:Dmitry Soshnikov 译者做了少量补充.这样的的文字是译者加的,可以选择忽略. 作者微博:@Bosn 在这个简短 ...

  3. Gitlab系列九之取消用户注册页面和删除用户

    一.取消用户注册页面 Admin Area--->Settings--->Sign-up enabled(取消前面的勾)---save 二.删除用户 Users----Destroy(点他 ...

  4. Scala实现冒泡排序、归并排序和快速排序

    1.冒泡排序 def sort(list: List[Int]): List[Int] = list match { case List() => List() case head :: tai ...

  5. objc语言的运行时处理

    在Objective-C中,消息是通过objc_msgSend()这个runtime方法及相近的方法来实现的.这个方法需要一个target,selector,还有一些参数.理论上来说,编译器只是把消息 ...

  6. jquery如何判断checkbox(复选框)是否被选中 全选 反选

    好长时间没用jq, 之前用的都是ng. 想着随便参考一下,结果被坑.因为这篇文章是09年的,也和当时jq的版本号有关,但是为什么在百度排名第一,百度果然坑人,以后还是google 给出坑人文章的链接 ...

  7. 在Ubuntu 12.04上配置iSCSI Target服务

      今天自己按照网上搜来的教程自己在Ubuntu 12.04上配置了iSCSI Target服务,在这里简单地做个纪录.操作系统是全新安装的Ubuntu 12.04,配置一块500 GB的SATA笔记 ...

  8. POJ 3071 Football 【概率DP】

    Football Football Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 3734   Accepted: 1908 ...

  9. Selenium2 Python 自己主动化測试实战学习笔记(五)

    7.1 自己主动化測试用例 无论是功能測试.性能測试和自己主动化測试时都须要编写測试用例,測试用例的好坏能准确的体现了測试人员的经验.能力以及对项目的深度理解. 7.1.1 手工測试用例与自己主动化測 ...

  10. SSH——基于datagrid实现分页查询

    1. 修改页面中datagrid的URL地址,访问action // 取派员信息表格 $('#grid').datagrid( { iconCls : 'icon-forward', fit : tr ...