package com.wangxuegang.utils;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
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;
/**
* 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服务器文件存放路径。例如分日期存放:/2018/11/19。文件的路径为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 成功返回true,否则返回false
*/
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;
}
/**
* 测试Main
*/
public static void main(String[] args) {
try {
/**
// * 依赖commons-net-3.5.jar
* Description: 向FTP服务器上传文件
* @param host FTP服务器hostname
* @param port FTP服务器端口
* @param username FTP登录账号
* @param password FTP登录密码
* @param basePath FTP服务器基础目录
* @param filePath FTP服务器文件存放路径。例如分日期存放:/2018/11/19。文件的路径为basePath+filePath
* @param filename 上传到FTP服务器上的文件名
* @param input 输入流
* @return 成功返回true,否则返回false
*/
FileInputStream in=new FileInputStream(new File("D:\\123.jpg"));
boolean flag = uploadFile("127.0.0.1", 22, "username", "password", "/data","/2018/11/19", "123.jpg", in);
System.out.println(flag);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
相关推荐
《基于SpringBoot的FTPUtil工具类详解》 在IT领域,SpringBoot框架因其简洁的配置、快速的开发特性,已经成为Java开发的首选。而在实际项目中,文件上传和下载是常见的功能之一,FTP(File Transfer Protocol)作为...
FtpUtil工具类源码
ftp工具类,构造方法初始化类,连接ftp,列出所有文件内容,下载文件
2. **FTP工具类**:`FtpUtil`是核心工具类,它包含了一系列静态方法,如`connect()`用于建立连接,`uploadFile()`和`downloadFile()`分别用于文件上传和下载,以及`disconnect()`用于关闭连接。这些方法内部会使用`...
`FtpUtil.java` 文件是这个工具类的核心,它通常会包含以下关键组件: 1. **连接设置**:工具类需要设置FTP服务器的主机地址、端口号、用户名和密码,以及可能的连接模式(主动或被动)。 2. **连接和断开**:`...
D:\002 我的工具类\016 FtpUtil\FtpUtil.java D:\002 我的工具类\016 FtpUtil\FtpUtils.java D:\002 我的工具类\017在页面上显示各种文档中的内容。在servlet中的逻辑 D:\002 我的工具类\017在页面上显示各种文档中...
https://blog.csdn.net/weixin_45044097/article/details/109637761,这是原文。上传的资源是ftp上传的两个工具类,接近1500行代码,实现ftp连接,文件获取,上传,下载
这里提到的几个工具类都是Java开发中非常实用的,它们分别是CookieUtils、EasyUIResult、IDUtils、JsonUtils以及FtpUtil。下面将对这些工具类的功能进行详细介绍。 1. **CookieUtils**: 这个工具类主要用于处理HTTP...
《FTPUtil.java——Java实现FTP文件传输工具类详解》 在Java编程中,FTPUtil.java是一个常见的工具类,用于处理FTP(File Transfer Protocol)文件传输协议相关的操作。它提供了便捷的方法来连接FTP服务器,上传、...
5. `FtpUtil.java`:FTP(文件传输协议)工具类,提供了连接FTP服务器、上传/下载文件、管理目录等FTP相关操作的API。 6. `TaotaoResult.java`:这个名字可能是参照淘宝的API设计,用于封装接口返回的结果,通常...
接下来,我们将深入探讨FTP工具类的主要功能、使用方法以及源码分析。 **1. FTPClient类** FTPClient是Apache Commons Net的核心类,它实现了FTP协议的大部分功能。通过这个类,我们可以连接到FTP服务器,执行登录...
这个工具可能包含了一个名为`ftputil`的Java类,该类提供了连接FTP服务器、登录、切换目录、列出文件、下载文件等功能。开发者可以通过调用这个类的方法来实现FTP操作。例如,可能有一个`listJavaFiles(String ...
项目中添加该工具类,用一下语句调用 FTPUtil ftpUtil = new FTPUtil("172.16.1.41",21,"admin","123456"); ftpUtil.downLoadFile("20190913.txt","D:\\ftplocal\\20190913.txt"); ftpUtil.uploadFile&#...
FTPUtil_ftp_ 是一个基于Java编程语言实现的FTP客户端工具类,主要用于处理FTP(File Transfer Protocol)相关的操作,如上传文件、下载文件以及批量上传和下载。在IT行业中,FTP是一个广泛使用的协议,用于在计算机...
资源包括Java开发中经常使用到的一些工具类,源代码,亲测可直接使用。 工具类包括:CookieUtils;ExceptionUtil;FtpUtil;HttpClientUtil;IDUtils;JsonUtils;PictureResult;EasyUIResult
1.jedis 2.cookieUtils 3.EaysUIResult 4.ExceptionUtil 5 FastDfsClientUtil 6.FtpUtil 7.HttpClientUtil 8.IDUtils 9.JosnUtils 10.PictureResult
这里我们将深入探讨如何在Java中实现图片文件的FTP上传,以及如何使用`FtpUtil.java`工具类。 首先,`FtpUtil.java`通常是一个封装了FTP操作的工具类,包括连接、登录、上传文件、断开连接等方法。在`FtpUtil`中,...
java FTP工具类,里面包含登陆,注销,查询FTP文件夹,以及下载进度条输出