JAVA中使用FTPClient上传下载

2023-11-13

 JAVA中使用FTPClient上传下载

        在JAVA程序中,经常需要和FTP打交道,比如向FTP服务器上传文件、下载文件,本文简单介绍如何利用jakarta commons中的FTPClient(在commons-net包中)实现上传下载文件。

一、上传文件

         原理就不介绍了,大家直接看代码吧

	/**
	 * Description: 向FTP服务器上传文件
	 * @Version1.0 Jul 27, 2008 4:31:09 PM by 崔红保(cuihongbao@d-heaven.com)创建
	 * @param url FTP服务器hostname
	 * @param port FTP服务器端口
	 * @param username FTP登录账号
	 * @param password FTP登录密码
	 * @param path FTP服务器保存目录
	 * @param filename 上传到FTP服务器上的文件名
	 * @param input 输入流
	 * @return 成功返回true,否则返回false
	 */
	public static boolean uploadFile(String url,int port,String username, String password, String path, String filename, InputStream input) {
		boolean success = false;
		FTPClient ftp = new FTPClient();
		try {
			int reply;
			ftp.connect(url, port);//连接FTP服务器
			//如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器
			ftp.login(username, password);//登录
			reply = ftp.getReplyCode();
			if (!FTPReply.isPositiveCompletion(reply)) {
				ftp.disconnect();
				return success;
			}
			ftp.changeWorkingDirectory(path);
			ftp.storeFile(filename, input);			
			
			input.close();
			ftp.logout();
			success = true;
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (ftp.isConnected()) {
				try {
					ftp.disconnect();
				} catch (IOException ioe) {
				}
			}
		}
		return success;
	}

 

下面我们写两个小例子:

1.将本地文件上传到FTP服务器上,代码如下:

	@Test
	public void testUpLoadFromDisk(){
		try {
			FileInputStream in=new FileInputStream(new File("D:/test.txt"));
			boolean flag = uploadFile("127.0.0.1", 21, "test", "test", "D:/ftp", "test.txt", in);
			System.out.println(flag);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
	}

2.在FTP服务器上生成一个文件,并将一个字符串写入到该文件中

	@Test
	public void testUpLoadFromString(){
		try {
			InputStream input = new ByteArrayInputStream("test ftp".getBytes("utf-8"));
			boolean flag = uploadFile("127.0.0.1", 21, "test", "test", "D:/ftp", "test.txt", input);
			System.out.println(flag);
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
	}


二、下载文件

       从FTP服务器下载文件的代码也很简单,参考如下:

	/**
	 * Description: 从FTP服务器下载文件
	 * @Version1.0 Jul 27, 2008 5:32:36 PM by 崔红保(cuihongbao@d-heaven.com)创建
	 * @param url FTP服务器hostname
	 * @param port FTP服务器端口
	 * @param username FTP登录账号
	 * @param password FTP登录密码
	 * @param remotePath FTP服务器上的相对路径
	 * @param fileName 要下载的文件名
	 * @param localPath 下载后保存到本地的路径
	 * @return
	 */
	public static boolean downFile(String url, int port,String username, String password, String remotePath,String fileName,String localPath) {
		boolean success = false;
		FTPClient ftp = new FTPClient();
		try {
			int reply;
			ftp.connect(url, port);
			//如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器
			ftp.login(username, password);//登录
			reply = ftp.getReplyCode();
			if (!FTPReply.isPositiveCompletion(reply)) {
				ftp.disconnect();
				return success;
			}
			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();
			success = true;
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (ftp.isConnected()) {
				try {
					ftp.disconnect();
				} catch (IOException ioe) {
				}
			}
		}
		return success;
	}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JAVA中使用FTPClient上传下载 的相关文章

  • 表“DBNAME.hibernate_sequence”不存在

    我有一个使用 spring data jpa 的 Spring Boot 2 0 1 RELEASE 应用程序
  • Jprofiler Linux 上的远程分析。如何更改探查器数据文件的路径

    我正在 Linux 盒子上运行 java java 6 应用程序并进行其他设置 agentpath home myuser jprofiler bin linux x64 libjprofilerti so nowait 端口 7777 在
  • 如何反编译混淆的java程序以避免类/包名称冲突

    我想反编译一个java程序并重新编译派生的 混淆的 源代码 我解压了 jar 存档并得到了如下目录结构 com com foo A com foo A A class com foo A B Class com foo B A class
  • 在远程 Tomcat 上自动部署 Java 应用程序

    我希望能够自动将 Java 应用程序部署到 tomcat 服务器 现在的情况 正在 Eclipse 中开发 Java 项目 Tomcat 服务器在另一台机器上运行 提供该项目的 WAR 文件 我的目标 可以轻松编译项目并将其部署到远程 To
  • Jersey 2 - ContainerRequestFilter get 方法注解

    我试图获取 ContainerRequestFilter 对象中的方法注释 控制器 GET RolesAllowed ADMIN public String message return Hello rest12 容器请求过滤器 Provi
  • Eclipse 构建 Android 应用程序:如何在编译时创建两个版本?

    我正在编写一个 Android 应用程序 并希望基于相同的代码创建两个版本 免费版本和高级版本 我有两个版本的一个代码库 具有各种运行时检查来启用或禁用某些功能 例如 public class MyAppContext extends Ap
  • Android WebView - 带有经过身份验证的代理

    我目前正在尝试调试围绕 WebView 构建的 Android 应用程序 我负责处理的开发网络环境 不是我的选择 这是 企业 安全决策 是WPA WiFi 代理服务器 代理身份验证 虽然a上的说明以前的答案非常有帮助 https stack
  • ANT - 如何使用 javac 排除、排除文件?

    查看了 stackoverflow 上的几篇文章以及其他来源 在线 ANT 定义指南 但到目前为止没有一个有帮助 我无法从编译中排除该文件 我只有一个文件想要从编译中排除 而 ANT 文档并没有真正说明细节 我试图排除HTMLParser
  • 递归 - 与 Java 中不重复的数组相结合

    所以我知道如何获取组合的大小 数组大小 在我的例子中 除以所需数组子集大小的阶乘 我遇到的问题是获取组合 到目前为止 我已经阅读了 stackoverflow 上的大部分问题 但一无所获 我认为我发现的问题是我想将创建的组合子集中的元素添加
  • 配置 logback 以遵循 Java 配置,即 Logback 的纯 Java 配置

    我只是不喜欢 Logback 的 XML 或 Groovy 配置 更喜欢用 Java 进行配置 这也是因为我将在初始化后的不同时间在运行时更改配置 似乎对 Logback 进行 Java 配置的唯一方法是进行某种初始化劫持根追加器 http
  • Android Studio 1.0.1 APK META-INF/DEPENDENCIES 中复制的重复文件

    我安装了 Android Studio 版本 1 0 1 并尝试将我的项目从 eclipse 导入到它 它给了我以下错误 Error Execution failed for task app packageDebug Duplicate
  • java中的new关键字是多余的吗?

    我来自 C 所以 java 的一个特性我不太理解 我读过所有对象都必须使用关键字创建new 但基元除外 现在 如果编译器可以识别原始类型 并且不允许您在不调用其构造函数的情况下创建对象new 有这个关键字的原因是什么new根本吗 有人可以提
  • Java HashSet 具有自定义相等标准? [复制]

    这个问题在这里已经有答案了 我一直在寻找类似于 Java TreeSet 在实例化时接收自定义比较器的能力 因此我不需要使用对象的默认相等 和哈希码 标准 我能想到的最接近的方法是将我的对象包装在一个私有的自定义类中 但这看起来很老套 这最
  • 光线追踪三角形

    我正在用java编写一个光线追踪器 并且我能够追踪球体 但我相信我追踪三角形的方式有问题 据我了解 这是基本算法 首先确定射线是否与plane三角形已打开 剪裁所有点 使它们与三角形位于同一平面上 因此xy以平面为例 根据沿着新平面向任意方
  • Spring-WS WSDL生成问题

    我正在尝试制作一个非常简单的 Web 服务 但在让 spring 生成正确的 wsdl 时遇到一些困难 我已尽力复制此示例春季教程 http static springsource org spring ws sites 2 0 refer
  • 在 Spring 中以编程方式解析 AliasFor 注释值

    我有一个注释 Target ElementType TYPE Retention RetentionPolicy RUNTIME public interface A Class value 这是在课堂上使用的 B D class publ
  • Android 中的 RoboSpice 库是什么

    我正在尝试了解 android 中的 RoboSpice 库 我在这里看到了在线文档 https github com stephanenicolas robospice wiki Starter Guide 我尝试过什么 我之前研究过使用
  • Java - 全局、可重用的加载对话框

    我正在尝试实现一个全局加载对话框 我想调用一些静态函数来显示对话框和一些静态函数来关闭它 与此同时 我正在主线程或子线程中做一些工作 我尝试以下操作 但对话框没有更新 最后一次 在再次隐藏之前 它会更新 private static Run
  • 有没有办法在坐标平面上动态绘制点之间的线?

    我正在完成一个项目 在该项目中我实现了一个暴力算法来解决凸包问题 我还需要为该算法创建视觉效果 我试图在 x 轴和 y 轴上创建一个范围从 100 100 的坐标平面 绘制完整集中的所有点 并在点之间动态绘制线条以创建凸包 例如 假设我有
  • 当考虑性能时如何从文件中读取整数?

    我正在 CodeEval 上执行一些任务 基本上任务非常简单 打印出从文件中读取的所有整数的总和 我的解决方案如下 import java io File import java io IOException import java io

随机推荐

  • 镜像iso文件下载地址

    CentOS 7官方下载地址 https www centos org download Centos国内下载源 以下链接均可下载镜像文件 http man linuxde net download CentOS http centos u
  • 面向对象程序设计语言(Java)-1.概述

    概述 1 Java的两层含义 2 Java语言的特点 3 Java的应用平台 4 Java的工作原理 5 Java环境中的概念 6 初始Java程序 7 Java程序的基本组成 8 开发Java程序的步骤 9 注释 1 Java的两层含义
  • JavaScript中的扁平化数据转换为树形结构、树形结构扁平化数据

    1 扁平化数据 gt 树形结构 1 1 第一种数据类型 原始数据只有id和pId相互关联 let data id 639 name 商品管理 type 0 pId 638 code 1 domain id 640 name 商品分类 typ
  • antdv(vue)组件中tree-select使用

    官网教程 组件tree select 实现效果 1 基本用法 直接使用 在vue层写数据 注意 注册组件要包含treeSelect和其中的节点ATreeSelectNode 不注册会报错 如下
  • Oracle常用代码总结

    1 用户 创建用户 create user dm identified by dm default tablespace BIGDATA DM temporary tablespace DM TEMP profile default 修改用
  • Centos7 搭建 Minikube

    Centos7 搭建 Minikube 目录 Centos7 搭建 Minikube 参考博客 运行环境 安装过程 配置系统环境 安装Docker 安装Kubectl 参考博客 参考博客 运行环境 系统版本 CentOS Linux rel
  • Flutter 页面中添加水印、自定义水印

    最近开发手机APP 使用 Fltter 由于需要使用水印的功能 但是第一次接触Flutter 就想着能不能在网上找到现成的使用 结果全是一群复制粘贴的 还卵用没有 不过由于我太机制 直接去官方的 pub get 找到一个插件 嘿嘿 pub
  • 教你统计日留存、周留存、月留存率更准确的方法。

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 什么是留存用户 某段时间内的新增用户 经过一段时间后 仍继续使用应用的被认作是留存用户 这部分用户占当时新增用户的比例即是留存率 统计留存用户的时间粒度有哪些 自然日 包括
  • C/C++宏编程

    C C 宏编程 宏的复杂使用 永远不要写两次 介绍 我读过的所有C C 教科书都批评宏的使用 不要使用它们 它们很危险 因为它们隐藏了你实际写的东西 尤其是看起来很实用的宏 有些人甚至说 没有理由在C 的模板类的发明中使用宏 尽管如此 宏仍
  • centos7 mysql启动失败_RPM方式安装MySQL

    RPM方式安装MySQL 最近浪子尝试使用mycat做MySQL的读写分离和分表分库 因此搭建了几台虚拟机来做操作 话不多说 我们现在centos7上安装MySQL 据说centos7上面直接用yum的方式安装MySQL会失败 那么我就直接
  • 与或非逻辑符号_数电学习之 逻辑电路(1)

    先导 逻辑图的表示 1 与或非 01 02 03 2 扩展 异或 不同为1 相同为0 和同或 相同为1 不同为0 3 复合运算 与非 与后面加一个小圆圈 或非 或后面加一个小圆圈 与或非 两个与输入到或中 或后面加一个小圆圈 4 逻辑公式
  • Qtcreator中来调用python的函数的用法

    以下内容是参考博客 https blog csdn net alxe made article details 83382159 由以上大神的博客作为参考成功实现的 一 先说几点注意的地方 1 就是需要将python的路径在pro中加载进来
  • 和利时系统如何下装服务器,和利时服务器如何将A设置B

    和利时服务器如何将A设置B 内容精选 换一换 系统盘镜像和数据盘镜像为128个 整机镜像为10个 没有限制 可以 支持中国站和国际站的帐号之间共享镜像 但是仅限于中国站和国际站共同拥有的区域 例如 您在中国站的 华北 北京四 的镜像不能共享
  • ShardingSphere报错-java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer

    目录 一 场景 二 报错信息 三 排查 四 原因 五 解决 一 场景 1 项目使用ShardingJDBC操作数据库 2 查询SQL执行报错 但将sql复制到navicat中执行 是正常的 二 报错信息 nested exception i
  • 2021-06-15

    com aspose diagram afr Unexcepted eof 有没有大佬遇到过这个问题 救命
  • 华为OD机试 Java 几何平均值最大子数组

    题目 代码 import java util public class MaxGeometricMean public static void main String ar
  • Vue 响应式实现原理

    准备工作 数据驱动 响应式的核心原理 发布订阅模式和观察者模式 数据驱动 数据响应式 双向绑定 数据驱动 数据响应式 数据模型仅仅是普通的 JS 对象 而当我们修改数据时 试图回进行更新 避免了繁琐的 DOM 操作 提高开发效率 双向绑定
  • 类是公共的 应该在 java中声明_Java入门-类HelloWorld是公共的,应在名为HelloWorld.java的文件中声明...

    开始学习java了 搭好环境 notepad 中新建一个java文件 新建一个HelloWorld类 public class HelloWorld public static void main String args System ou
  • Verilog自动生成 CRC 校验代码

    CRC 循环冗余码 表示形式 多项式G x G x X4 X3 1 假设 输入数据 Data 选定的多项式G x 是x4 x3 1 所以G M 11001 CRC Data mod G 注 CRC的位数要始终比G少1位 因为余数肯定比除数小
  • JAVA中使用FTPClient上传下载

    JAVA中使用FTPClient上传下载 在JAVA程序中 经常需要和FTP打交道 比如向FTP服务器上传文件 下载文件 本文简单介绍如何利用jakarta commons中的FTPClient 在commons net包中 实现上传下载文