当前位置: 移动技术网 > IT编程>开发语言>Java > Java 实现FTP服务实例详解

Java 实现FTP服务实例详解

2019年07月22日  | 移动技术网IT编程  | 我要评论

java 实现ftp服务实例详解

1、ftp简介

        ftp 是file transfer protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。用于internet上的控制文件的双向传输。同时,它也是一个应用程序(application)。基于不同的操作系统有不同的ftp应用程序,而所有这些应用程序都遵守同一种协议以传输文件。在ftp的使用当中,用户经常遇到两个概念:"下载"(download)和"上传"(upload)。"下载"文件就是从远程主机拷贝文件至自己的计算机上;"上传"文件就是将文件从自己的计算机中拷贝至远程主机上。用internet语言来说,用户可通过客户机程序向(从)远程主机上传(下载)文件。

2、实例

2.1、添加依赖

<!-- 文件上传组件 --> 
 <dependency> 
   <groupid>commons-fileupload</groupid> 
   <artifactid>commons-fileupload</artifactid> 
 </dependency> 

2.2测试类

package testcontroller; 
 
import org.apache.commons.net.ftp.ftp; 
import org.apache.commons.net.ftp.ftpclient; 
import org.chenzhengyou.common.util.ftputil; 
import org.junit.test; 
 
import java.io.file; 
import java.io.fileinputstream; 
 
/** 
 * @auther 陈郑游 
 * @create 2016-11-23-19:27 
 * @功能描述 图片测试 
 * @公司地址 
 */ 
 
public class ftpcontroller { 
 
  //主机地址 端口号 
  private string hostname = "127.0.0.1"; 
  private integer port = 21; 
  //本地图片路径 
  private string filepackage = "f:\\programming_package\\img_3733_1.jpg"; 
 
  //用户名 密码 
  private string username = "czy"; 
  private string password = "czy"; 
 
  /** 
   * 无工具类图片测试 
   * */ 
  @test 
  public void testftp() throws exception { 
    //创建一个ftpclient对象 
    ftpclient ftpclient = new ftpclient(); 
    //创建ftp连接。默认是21端口 
    ftpclient.connect(hostname,port); 
    //登录ftp服务器,使用用户名和密码 
    ftpclient.login(username,password); 
    //上传文件。 
    //读取本地文件 
    fileinputstream inputstream = new fileinputstream(new file(filepackage)); 
    //设置上传的路径 
    ftpclient.changeworkingdirectory("/myftp/images"); 
    //修改上传文件的格式 
    ftpclient.setfiletype(ftp.binary_file_type); 
    //第一个参数:服务器端文档名 
    //第二个参数:上传文档的inputstream 
    ftpclient.storefile("hello.jpg", inputstream); 
    //关闭连接 
    ftpclient.logout(); 
  } 
} 

2.3、ftp工具类上传图片

工具类

package org.chenzhengyou.common.util; 
 
import org.apache.commons.net.ftp.ftp; 
import org.apache.commons.net.ftp.ftpclient; 
import org.apache.commons.net.ftp.ftpfile; 
import org.apache.commons.net.ftp.ftpreply; 
 
import java.io.*; 
 
/** 
 * @auther 陈郑游 
 * @create 2016-11-23-19:27 
 * @功能描述 ftp工具类 
 * @公司地址 
 */ 
public class ftputil { 
 
  /** 
   * description: 向ftp服务器上传文件 
   * @param host ftp服务器hostname 
   * @param port ftp服务器端口 
   * @param username ftp登录账号 
   * @param password ftp登录密码 
   * @param basepath ftp服务器基础目录 
   * @param filepath ftp服务器文件存放路径。例如分日期存放:/2015/01/01。文件的路径为basepath+filepath 
   * @param filename 上传到ftp服务器上的文件名 
   * @param input 输入流 
   * @return 成功返回true,否则返回false 
   */  
  public static boolean uploadfile(string host, int port, string username, 
                   string password, string basepath, 
      string filepath, string filename, inputstream input) { 
 
    boolean result = false; 
    ftpclient ftp = new ftpclient(); 
    try { 
      int reply; 
      ftp.connect(host, port);// 连接ftp服务器 
      // 如果采用默认端口,可以使用ftp.connect(host)的方式直接连接ftp服务器 
      ftp.login(username, password);// 登录 
      reply = ftp.getreplycode(); 
      if (!ftpreply.ispositivecompletion(reply)) { 
        ftp.disconnect(); 
        return result; 
      } 
      //切换到上传目录 
      if (!ftp.changeworkingdirectory(basepath+filepath)) { 
        //如果目录不存在创建目录 
        string[] dirs = filepath.split("/"); 
        string temppath = basepath; 
        for (string dir : dirs) { 
          if (null == dir || "".equals(dir)) continue; 
          temppath += "/" + dir; 
          if (!ftp.changeworkingdirectory(temppath)) { 
            if (!ftp.makedirectory(temppath)) { 
              return result; 
            } else { 
              ftp.changeworkingdirectory(temppath); 
            } 
          } 
        } 
      } 
      //设置上传文件的类型为二进制类型 
      ftp.setfiletype(ftp.binary_file_type); 
      //上传文件 
      if (!ftp.storefile(filename, input)) { 
        return result; 
      } 
      input.close(); 
      ftp.logout(); 
      result = true; 
    } catch (ioexception e) { 
      e.printstacktrace(); 
    } finally { 
      if (ftp.isconnected()) { 
        try { 
          ftp.disconnect(); 
        } catch (ioexception ioe) { 
        } 
      } 
    } 
    return result; 
  } 
   
  /** 
   * description: 从ftp服务器下载文件 
   * @param host ftp服务器hostname 
   * @param port ftp服务器端口 
   * @param username ftp登录账号 
   * @param password ftp登录密码 
   * @param remotepath ftp服务器上的相对路径 
   * @param filename 要下载的文件名 
   * @param localpath 下载后保存到本地的路径 
   * @return 
   */  
  public static boolean downloadfile(string host, int port, string username, string password, string remotepath, 
      string filename, string localpath) { 
    boolean result = false; 
    ftpclient ftp = new ftpclient(); 
    try { 
      int reply; 
      ftp.connect(host, port); 
      // 如果采用默认端口,可以使用ftp.connect(host)的方式直接连接ftp服务器 
      ftp.login(username, password);// 登录 
      reply = ftp.getreplycode(); 
      if (!ftpreply.ispositivecompletion(reply)) { 
        ftp.disconnect(); 
        return result; 
      } 
      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(); 
      result = true; 
    } catch (ioexception e) { 
      e.printstacktrace(); 
    } finally { 
      if (ftp.isconnected()) { 
        try { 
          ftp.disconnect(); 
        } catch (ioexception ioe) { 
        } 
      } 
    } 
    return result; 
  } 
} 

实现类

package testcontroller; 
 
import org.apache.commons.net.ftp.ftp; 
import org.apache.commons.net.ftp.ftpclient; 
import org.chenzhengyou.common.util.ftputil; 
import org.junit.test; 
 
import java.io.file; 
import java.io.fileinputstream; 
 
/** 
 * @auther 陈郑游 
 * @create 2016-11-23-19:27 
 * @功能描述 图片测试 
 * @公司地址 
 */ 
 
public class ftpcontroller { 
 
  //主机地址 端口号 
  private string hostname = "127.0.0.1"; 
  private integer port = 21; 
  //本地图片路径 
  private string filepackage = "f:\\programming_package\\img_3733_1.jpg"; 
 
  //用户名 密码 
  private string username = "czy"; 
  private string password = "czy"; 
 
  /** 
   * 有工具类测试 
   * */ 
  @test 
  public void testutil() throws exception { 
    fileinputstream inputstream = new fileinputstream(new file("f:\\programming_package\\img_3733_1.jpg")); 
    ftputil.uploadfile(hostname,port, username, password, "/myftp/images", "/2016/11/24", "hello.jpg", inputstream); 
  } 
} 

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网