java实用工具类——使用java代码实现ftp上传下载工具类

java实用工具类——使用java代码实现ftp上传下载工具类一、引言小编最近忙着学习项目构架上的一些技术,把实用的工具类整理下,单独放在一个项目。其他项目需要用直接使用maven依赖一下就可以使用了。项目中需要实现上传多张图片,由于多张图片,又担心并发量大。所以小编做了一个负载均衡,把上传后的图片保存到linux上的ftp中去,不了解linux上的ftp小编后期编写个教程。二、实现以下ftp的工具类,前提需要保证你的ftp服务器能够使用ftp客…

大家好,又见面了,我是你们的朋友全栈君。

一、引言

小编最近忙着学习项目构架上的一些技术,把实用的工具类整理下,单独放在一个项目。其他项目需要用直接使用maven依赖一下就可以使用了。项目中需要实现上传多张图片,由于多张图片,又担心并发量大。所以小编做了一个负载均衡,把上传后的图片保存到linux上的ftp中去,不了解linux上的ftp小编后期编写个教程。

二、实现

以下ftp的工具类,前提需要保证你的ftp服务器能够使用ftp客户端连接工具进行上传和下载文件,不然可能会由于种种原因导致上传或下载失败。

小编项目亲测可用的哟!!

先引入jar包

  <!-- ftp远程工具 -->
 <dependency>
     <groupId>commons-net</groupId>
     <artifactId>commons-net</artifactId>
     <version>3.3</version>
 </dependency>
package com.taotao.model.utils;

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.*;

/**
 * ftp上传下载工具类
 * <p>Title: FtpUtil</p>
 * @version 1.0
 */
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;
	}

	/**
	 * 测试
	 * @param args
	 */
	public static void main(String[] args) {
		try {  
	       /* FileInputStream in=new FileInputStream(new File("/Users/Downloads/test.png"));
	        boolean flag = uploadFile("111.231.31.41", 21, "ftp_test", "test0", "/ftp_data/images","", "holle.jpg", in);*/
			boolean flag = downloadFile("111.231.31.41", 21,  "ftp_test", "testO","/ftp_data/images","test.jpg","/Volumes/H");
	        System.out.println(flag);  
	    } catch (Exception e) {
	        e.printStackTrace();  
	    }  
	}
}

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/131452.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • win10 java jdk环境变量 配置

    win10 java jdk环境变量 配置以前只是大概说了以下jdk配置的注意事项,今天准备详细记录一下,万一以后用的着呢。当然这不是我的原创工作,只是把网上有的内容整合了以下。首先到官网将jdk的安装包下载下来,这是网址(http://www.oracle.com/technetwork/java/javase/downloads/index.html)进去以后会看到如下画面:点击左边的JavaPlatform(JD

    2022年7月21日
  • 漫步数理统计二十六——多元正态分布

    漫步数理统计二十六——多元正态分布本片博文介绍多元正态分布,我们以nn维随机变量为主,但给出n=2n=2时二元情况的一些实例。与上篇文章一样,我们首先介绍标准情况然后扩展到一般情况,当然这里会用到向量与矩阵符号。考虑随机向量Z=(Z1,…,Zn)′\mathbf{Z}=(Z_1,\ldots,Z_n)^\prime,其中Z1,…,ZnZ_1,\ldots,Z_n是独立同分布的N(0,1)N(0,1)随机变量,那么对z∈Rn,Z\ma

    2022年10月25日
  • 用jquery实现表单验证_强大的表单验证插件

    用jquery实现表单验证_强大的表单验证插件中文汉化版,官方只有英文的。同时根据中国国情修改了部分验证规则。这个插件支持大部分的浏览器,但由于有使用到了css3的阴影和圆角样式,所以在IE浏览器下无法看到圆角和阴影效果(万恶的IE)。官方

    2022年9月27日
  • MariaDb数据库管理系统学习(二)使用HeidiSQL数据库图形化界面管理工具

    MariaDb数据库管理系统学习(二)使用HeidiSQL数据库图形化界面管理工具

    2021年12月9日
  • java heap space 什么意思_Java heap space 解决方法(转)

    java heap space 什么意思_Java heap space 解决方法(转)因为程序要从数据读取近10W行记录处理,当读到9W的时候就出现java.lang.OutOfMemoryError:Javaheapspace这样的错误。在网上一查可能是JAVA的堆栈设置太小的原因。跟据网上的答案大致有这两种解决方法:1、设置环境变量setJAVA_OPTS=-Xms32m-Xmx512m可以根据自己机器的内存进行更改,但本人测试这种方法并没有解决问题。可能是还有…

    2022年7月14日
  • 目标检测——SPPNet【含全网最全翻译】「建议收藏」

    目标检测——SPPNet【含全网最全翻译】「建议收藏」文章目录0.摘要1.简介2.基于空间金字塔池化的深度网络2.1卷积层和特征图2.2空间金字塔池化层2.3网络的训练2.3.1单一尺寸训练2.3.2多尺寸训练3.用于图像分类的SPP-NET3.1ImageNet2012分类实验3.1.1基准网络架构3.1.2多层次池化提升准确度3.1.3多尺寸训练提升准确度3.1.4全图像表示提升准确度3.1.5特征图上的多视图测试…

    2022年4月28日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号