在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. ylbtech-LanguageSamples-COMInteropPart1(COM 互操作 - 第一部分)

    ylbtech-Microsoft-CSharpSamples:ylbtech-LanguageSamples-COMInteropPart1(COM 互操作 - 第一部分) 1.A,示例(Sampl ...

  2. mysql 5.7 安装手册(for linux)

    1.下载和解压mysql数据库   wget http://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.9-linux-glibc2.5-x86_6 ...

  3. Hive中日期函数总结

    --Hive中日期函数总结: --1.时间戳函数 --日期转时间戳:从1970-01-01 00:00:00 UTC到指定时间的秒数 select unix_timestamp(); --获得当前时区 ...

  4. 如何在Ubuntu上使用Glances监控系统

    导读 Glances 是一个用于监控系统的跨平台.基于文本模式的命令行工具.它是用 Python 编写的,使用 psutil 库从系统获取信息.你可以用它来监控 CPU.平均负载.内存.网络接口.磁盘 ...

  5. centos7 minimal connect: Network is unreachable(转)

    新装的centos7,果然是很崭新啊. 装好之后打算看一下局域网的地址,然后就ip addr(centos 7 已经去掉了ifconfig这个命令).并没有显示局域网的ip地址. 然后我尝试ping ...

  6. Python学习笔记(五)多进程实现并发服务器

      每创建一个TCP连接,就创建一个进程. 代码如下: # coding: utf-8 import socket import os import sys import signal import ...

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

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

  8. Linux /bin, /sbin, /usr/bin, /usr/sbin 区别(转)

    在linux下我们经常用到的四个应用程序的目录是:/bin./sbin./usr/bin./usr/sbin    bin:  bin为binary的简写主要放置一些系统的必备执行档例如:cat.cp ...

  9. hdu 4723 How Long Do You Have to Draw(贪心)

    How Long Do You Have to Draw Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ( ...

  10. Centos6.2上做nginx和tomcat的集成及负载均衡(已实践)

    Centos6.2上做nginx和tomcat的集成及负载均衡 ---------------------------------------------------------Jdk-------- ...