java上传文件到ftp_java实现文件上传下载至ftp服务器

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

环境:首先,先安装ftp服务器,我是在win8本地用IIS配置的, 百度一下就可以找到安装文档。

1.在你的项目目录下建立ftp配置文件,目录如下图

f61f82a0c6c3c5caece0658b90278c05.png

01 ftpconfig.properties:

ftpIp=10.73.222.29

ftpPort=21

ftpUser=WP

ftpPwd=04143114wp

ftpRemotePath=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服务器链接

}

}

}

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值