在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. [shell 编程] if [ $# -eq 0 ]该语句是什么含义?

    $0: shell或shell脚本的名字$*:以一对双引号给出参数列表$@:将各个参数分别加双引号返回$#:参数的个数$_:代表上一个命令的最后一个参数$$:代表所在命令的PID$!:代表最后执行的后 ...

  2. Virtualbox环境中安装Oracle 11gr2 RAC(ASM)

    系统Oracle Linux 6.5,Oracle 11.2.0.1 终于开始安装ASM和RAC的行程了.开始前需要想清楚的几个事情: 如何规划网络配置(配置多网卡,实现连通性,规划内外网,eth0, ...

  3. OpenGL实现多层绘制(Layered Rendering) [转]

    http://blog.csdn.net/u010462297/article/details/50589991 引言 在某些情况下会需要用到多层绘制.FBO下有多个颜色挂接点(Color Attac ...

  4. javascript通过url向jsp页面传递中文参数乱码解决方法

    解决方法:在传递参数前将中文参数进行两次编码,jsp页面获取参数后对中文参数进行一次解码,中文参数就不会变为乱码了! 参考例子: <%@ page language="java&quo ...

  5. Macro definition of snprintf conflicts with Standard Library function declaration

    Macro definition of snprintf conflicts with Standard Library function declaration 即将此处的宏定义注释掉,因为在VS2 ...

  6. docker实战——构建Jekyll

    构建第一个应用 要构建的第一个应用是Jekyll框架的自定义网站.我们会构建一下两个镜像. 一个镜像安装Jekyll以及其他用于构建Jekyll网站的必要的软件包. 一个镜像通过Apache来让Jek ...

  7. Unity Android && Ant Automate Build 之一

    这几天抽空研究下Android SDK 自动化打包.顺便温习下Unity 与 Android 交互机制. 一.Unity 与 Android 的 消息传递机制 Example: 导出 Android ...

  8. IOS Appstore价格表

  9. SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

    SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)   这个 ...

  10. js实现select跳转

    js简单实现select跳转功能:代码例如以下 <!DOCTYPE html> <html> <head> <title></title> ...