博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java实现文件上传下载至ftp服务器
阅读量:5046 次
发布时间:2019-06-12

本文共 7065 字,大约阅读时间需要 23 分钟。

以前做的一个项目,用到了文件上传下载至ftp服务器,现在对其进行一下复习,比较简单,一下就能看明白。

环境:首先,先安装ftp服务器,我是在win8本地用IIS配置的, 百度一下就可以找到安装文档。
1.在你的项目目录下建立ftp配置文件,目录如下图

这里写图片描述

01 ftpconfig.properties:

ftpIp=10.73.222.29ftpPort=21ftpUser=WPftpPwd=04143114wpftpRemotePath=d://share

02 读取ftpconfig.properties中的具体内容的类:

package com.java.core.util;import java.io.IOException;import java.io.InputStream;import java.util.Properties;/** * @author wangpei * @version 创建时间:2017年5月6日 下午9:42:40 读取ftp文件的配置文件 */public class ReadFtpProperties {
private InputStream is; private Properties properties; public ReadFtpProperties() { is = this.getClass().getResourceAsStream("/ftpconfig.properties");// 将配置文件读入输入流中 properties = new Properties(); try { properties.load(is); } catch (IOException e) { System.out.println("配置文件不存在.."); e.printStackTrace(); } finally { if (null != is) { try { is.close(); } catch (IOException e) { System.out.println("关闭流失败.."); e.printStackTrace(); } } } } public String getIp() {
// 获取ftp服务器的ip地址 return properties.getProperty("ftpIp"); } public String getPort() {
// 获取ftp服务器的端口 return properties.getProperty("ftpPort"); } public String getUser() {
// 获取ftp登录用户名 return properties.getProperty("ftpUser"); } public String getPwd() {
// 获取ftp服务器的登录密码 return properties.getProperty("ftpPwd"); } public String getRemotePath() {
// 获取ftp服务器的存放文件的目录 return properties.getProperty("ftpRemotePath"); }}

03 文件上传下载的接口类

package com.java.web.service;import java.io.InputStream;import org.apache.commons.net.ftp.FTPClient;import com.java.core.util.ReadFtpProperties;/** * @author wangpei * @version 创建时间:2017年5月6日 下午6:39:03  * 文件上传下载业务逻辑接口层 */public interface FtpService {
/* * 登录至FTP */ public boolean loginFTP(FTPClient client, ReadFtpProperties rfp); /* * 退出ftp */ public boolean logout(FTPClient client);// /* * 上传文件到remotePath,其在ftp上的名字为inputStream */ public boolean uploadFile(FTPClient client, String remotePath, String fileNewName, InputStream inputStream, ReadFtpProperties rfp); /* * 从目录remotePath,下载文件fileName */ public InputStream downFileByFtp(FTPClient client, String remotePath, String fileName); /* * 删除ftp上的目录为pathName的文件 */ public boolean delFile(FTPClient client, String pathName);}

04 文件上传下载的接口实现类

package com.java.web.service.serviceImpl;import java.io.IOException;import java.io.InputStream;import java.io.UnsupportedEncodingException;import java.net.SocketException;import org.apache.commons.net.ftp.FTP;import org.apache.commons.net.ftp.FTPClient;import org.apache.commons.net.ftp.FTPFile;import com.java.core.util.ReadFtpProperties;import com.java.web.service.FtpService;/** * @author wangpei * @version 创建时间:2017年5月6日 下午10:02:28 类说明 */public class FtpServiceImpl implements FtpService {
public boolean loginFTP(FTPClient client, ReadFtpProperties rfp) { String ftpIp = rfp.getIp(); String ftpPort = rfp.getPort(); String ftpUser = rfp.getUser(); String ftpPwd = rfp.getPwd(); // String fgtpRemotePath = rfp.getRemotePath(); boolean b = false; try { client.connect(ftpIp, Integer.parseInt(ftpPort)); } catch (NumberFormatException e) { System.out.println("无法连接到ftp"); return false; } catch (SocketException e) { System.out.println("无法连接到ftp"); return false; } catch (IOException e) { System.out.println("无法连接到ftp"); return false; } client.setControlEncoding("uft-8"); try { b = client.login(ftpUser, ftpPwd); } catch (IOException e) { System.out.println("登录ftp出错"); logout(client);// 退出/断开FTP服务器链接 return false; } return b; } public boolean logout(FTPClient client) { boolean b = false; try { b = client.logout();// 退出登录 client.disconnect();// 断开连接 } catch (IOException e) { return false; } return b; } public boolean uploadFile(FTPClient client, String remotePath, String fileNewName, InputStream inputStream, ReadFtpProperties rfp) { boolean b = false; try { client.setFileType(FTPClient.BINARY_FILE_TYPE); client.enterLocalPassiveMode(); if (remotePath != null && !"".equals(remotePath.trim())) { String[] pathes = remotePath.split("/"); for (String onepath : pathes) { if (onepath == null || "".equals(onepath.trim())) { continue; } onepath = new String(onepath.getBytes("utf-8"), "iso-8859-1"); System.out.println("onepath=" + onepath); if (!client.changeWorkingDirectory(onepath)) { client.makeDirectory(onepath);// 创建FTP服务器目录 client.changeWorkingDirectory(onepath);// 改变FTP服务器目录 } else { System.out.println("文件单路径"); } } } b = client.storeFile(new String(fileNewName.getBytes("utf-8"), "iso-8859-1"), inputStream); } catch (UnsupportedEncodingException e) { return false; } catch (IOException e) { return false; } return b; } public InputStream downFileByFtp(FTPClient ftpClient, String remotePath, String fileName) { FTPFile[] fs; InputStream is = null; try { // 设置被动模式 ftpClient.enterLocalPassiveMode(); // 设置以二进制流的方式传输 ftpClient.setFileType(FTP.BINARY_FILE_TYPE); // 设置编辑格式 ftpClient.setControlEncoding("utf-8"); remotePath = remotePath.substring(0, remotePath.lastIndexOf(fileName)); fs = ftpClient.listFiles(remotePath);// 递归目标目录 for (FTPFile ff : fs) { if (ff.getName().equals(fileName)) {
// 查找目标文件 is = ftpClient.retrieveFileStream(new String( (remotePath + fileName).getBytes("utf-8"), "iso-8859-1")); break; } } } catch (IOException e) { e.printStackTrace(); } return is; } public boolean delFile(FTPClient ftpClient, String pathName) { boolean b = false; try { b = ftpClient.deleteFile(pathName); return b; } catch (Exception e) { return false; } finally { logout(ftpClient);// 退出/断开FTP服务器链接 } }}

代码很好理解,看一遍应该就可以理解,在这儿就不具体分析了,主要看代码中的注释。

转载于:https://www.cnblogs.com/wangxiaopei/p/8551208.html

你可能感兴趣的文章
安卓开发之调用摄像头、相册
查看>>
IT职场人生系列之十四:经验积累
查看>>
01011_怎么打开任务管理器?win7打开任务管理器方法
查看>>
用仿ActionScript的语法来编写html5——终篇,LegendForHtml5Programming1.0开源库件
查看>>
服务器端异步接受SOKCET请求
查看>>
联玛客(T 面试)
查看>>
JQ实现弹幕效果
查看>>
0909上机作业
查看>>
MAC 系统 各种操作
查看>>
FLV文件格式分析(附源码)
查看>>
基于VS Code创建Java command-line app
查看>>
JavaScript按特定条件截取字符串
查看>>
mysql explain key_len小结
查看>>
Windows 下安装 Kafka
查看>>
数据库设计经验谈
查看>>
在Windows Server 2008 R2上安装IIS服务
查看>>
Centos 7.4 yum方式安装nginx
查看>>
[C#] winform中的DataGridView的列宽设置(自动调整列宽)
查看>>
【zoj3645】高斯消元求解普通线性方程
查看>>
Material Design学习-----TextInputLayout
查看>>