FTPclient简单使用

2023-05-16

1 下载jar包

  • 1 new一个项目:
  • 在这里插入图片描述
  • 在这里插入图片描述
  • 2 进去 http://mvnrepository.com/
  • 3 搜说commons-net
    在这里插入图片描述
  • 3 点进去选择版本 3.3,复制:第一行不要
    在这里插入图片描述
  • 4 新建标签复制
  • 在这里插入图片描述
    在这里插入图片描述
  • 5 新建一个Test类,测试结果
	// TODO Auto-generated method stub
		FTPClient ftp = new FTPClient();
//	设置ip和端口
		ftp.connect("192.168.232.140", 21);
//	设置用户名和密码
		ftp.login("ftpuser", "123");
//	设置文件类型(不设置可能导图片乱码)
		ftp.setFileType(FTPClient.BINARY_FILE_TYPE);

		InputStream is  = new FileInputStream("f:/1.PNG");
//	存储在服务端的名称
		ftp.storeFile("abc.PNG", is);
		ftp.logout();
		System.out.println("上传成功");

以上代码被封装在了工具类FtpUtile中,以后用到可直接使用,不用自己写

package com.bjsxt.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服务器文件存放路径。例如分日期存放:/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;
	}
	
	public static void main(String[] args) {
		try {  
	        FileInputStream in=new FileInputStream(new File("E:/a.png"));  
	        boolean flag = uploadFile("192.168.17.129", 21, "ftpuser", "ftpuser", "/home/ftpuser/","/", "abc1.png", in);  
	        System.out.println(flag);  
	    } catch (FileNotFoundException e) {  
	        e.printStackTrace();  
	    }  
	}
}

  • 6 测试工具类
public static void main(String[] args) throws IOException {
		InputStream is = new FileInputStream("F:/1.PNG");
		boolean result = FtpUtil.uploadFile(
				"192.168.232.140", 21, "ftpuser", "123", "/home/ftpuser/aaa", "bbb"
				, "aaa.PNG", is);
		if (result) {
			System.out.println("上传成功");
		} else {
			System.out.println("上传失败");
		}
		//测试成功

至此,测试成功

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FTPclient简单使用 的相关文章

随机推荐

  • JAVA托运行李计算费用

    7 托运行李计算费用 xff1a 实验要求 xff1a xff08 1 xff09 货车在计算托运行李费用时以kg为单位计算费用 xff08 12元 kg xff09 xff0c 忽略重量中的小数部分 xff0c 即忽略不足1kg的部分 x
  • JAVA复制数组的三种方法

    public class test01 ArraysCopy public static void main String args 1 用for循环复制数组 int arr 61 1 2 3 4 5 6 7 8 9 int arr1 61
  • 如何把已安装的nodejs高版本降级为低版本

    windows如何把已安装的nodejs高版本降级为低版本 第一步 xff1a 先清空本地安装的node js版本 1 按健win 43 R弹出窗口 xff0c 键盘输入cmd 然后敲回车 xff08 或者鼠标直接点击电脑桌面最左下角的wi
  • SQL版本:多表连接查询(两张表为例)

    SQL版本 xff1a 数据准备 xff1a 创建一个数据库company CREATE DATABASE IF NOT EXISTS company 创建部门表 CREATE TABLE dept id INT PRIMARY KEY A
  • 【Redis 常用五大数据类型】

    常用五大数据类型 官方获取redis常见数据类型操作命令 xff1a http www redis cn commands html 1 Redis键 key keys 查看当前库所有key 匹配 xff1a keys 1 exists k
  • 【Mysql 基础知识】

    一 引言 1 1 现有的数据存储方式有哪些 xff1f Java程序存储数据 xff08 变量 对象 数组 集合 xff09 xff0c 数据保存在内存中 xff0c 属于瞬时状态存储 文件 xff08 File xff09 存储数据 xf
  • vue3 + vite + ts + setup , 第九练 自定义指令directive的使用,简单封装一个拖动指令

    除了 Vue 内置的一系列指令 比如 v model 或 v show 之外 xff0c Vue 还允许你注册自定义的指令 xff0c 一个自定义指令被定义为一个包含类似于组件的生命周期钩子的对象 钩子接收指令绑定到的元素 1 Vue3指令
  • MyBatis框架知识点总结

    一 引言 1 1 什么是框架 xff1f 框架 xff1a 框架使用你的 xff0c 而不是你在使用框架的 框架让我们提供什么信息 xff0c 配置信息 xff0c 数据库连接用户名密码等 xff0c 你必须提供 xff0c 还得按照框架要
  • AndroidStudio Unresolved reference

    在学习Kotlin过程中 xff0c 出现了两次在activity main xml中已注册id xff0c 但是在MainActivity kt中无法找到该Button的情况 后面发现是没有在build gradle中导入 39 koti
  • Spring学习(全)

    本文目录 1 Spring概述2 IOC 控制反转2 1 简单介绍2 2 Spring的第一个程序2 3 DI入门2 3 1 XML之set注入简单类型的set注入引用类型的set注入引用类型的自动注入autowire 2 3 2 XML之
  • Python3读写dbf文本

    Python3读写dbf文本 安装环境 pip install dbf 关于dbf的文档可以在一下网址了解dbf文档 https pythonhosted org dbf 还有github的地址 https github com ethan
  • minicom的usb串口的驱动以及识别

    fire 64 fire test lsmod grep usb usbserial 49152 1 pl2303 fire 64 fire test dmesg 383 172363 usb 2 1 4 new full speed US
  • ubuntu搭建http文件服务器

    搭建的过程 sudo apt install apache2 sudo apt install apache2 sudo apt install php sudo apt get install libapache2 mod php sud
  • ubuntu搭建http文件服务器

    搭建的过程 sudo apt install apache2 sudo apt install apache2 sudo apt install php sudo apt get install libapache2 mod php sud
  • 元胞自动机-森林火灾模拟

    引入 xff1a 元胞自动机 xff0c 英文名及缩写 xff1a cellular automata xff0c CA 最初是由冯诺依曼在二十世纪五十年代为模拟生物自保的自我复制而提出的 xff0c 但是当时并未受到重视 后来才逐渐发展起
  • wsl,Ubuntu,关于解决 mysql-server : 依赖: mysql-server-5.7 但是它将不会被安装 问题

    出现问题 xff1a 安装mysql时 xff0c sudo apt span class token operator span get install mysql span class token operator span serve
  • vue3 + vite + ts + setup , 第十练 自定义hooks的使用

    Vue3 自定义Hook 主要用来处理复用代码逻辑的一些封装 这个在vue2 就已经有一个东西是Mixins mixins就是将这些多个相同的逻辑抽离出来 xff0c 各个组件只需要引入mixins xff0c 就能实现一次写代码 xff0
  • 完全去中心化的学习(Fully Decentralized Learning)

    完全去中心化的学习是一种使用区块链技术实现的机器学习方法 xff0c 其中参与者可以在不需要信任中心的情况下共同训练模型 相比于传统的集中式学习方法 xff0c 完全去中心化的学习有以下几个优点 xff1a 数据隐私性更好 xff1a 传统
  • 【Ubuntu】Ubuntu出现一直登录界面循环状况

    问题描述 xff1a 在Ubuntu中登录密码输入正确但却无法登录 xff0c 闪动以后再次回到登录界面 ubuntu版本 xff1a ubuntu 16 04 7 问题原因 xff1a 可能是 etc profile文件中PATH配置不正
  • FTPclient简单使用

    1 下载jar包 1 new一个项目 xff1a 2 进去 http mvnrepository com 3 搜说commons net 3 点进去选择版本 3 3 xff0c 复制 xff1a 第一行不要 4 新建标签复制 5 新建一个T