Java 实现FTP服务实例详解
程序员文章站
2024-02-24 23:59:16
java 实现ftp服务实例详解
1、ftp简介
ftp 是file tran...
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); } }
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
上一篇: MySql实现跨表查询的方法详解
下一篇: java字符串的大写字母右移实现方法