FTP测试工具类「建议收藏」

FTP测试工具类「建议收藏」因项目现场无法部署IDE工具联调FTP服务器,开发个简单的小工具,打成jar部署联调测。一下是该工具的源代码。packagecn.org.july.ftp;importorg.apache.commons.net.ftp.FTPClient;importorg.apache.commons.net.ftp.FTPFile;importorg.apache.commons.net….

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

在进入正文前,先给大家分享一款比较好用的服务器连接工具
IIS7服务器管理工具是一款windows全系下用于连接并操控基于windows和linux系统的VPS、VNC、FTP等远程服务器、云服务器的管理工具。
界面简单明了,操作易上手,功能强大,支持批量导入服务器,并批量打开,多窗口化管理,除此之外,加载本地硬盘、硬盘映射、加载服务器的声音,远程声卡读取等功能也一应俱全,完全实现了各类场景使用,对于FTP连接界面,其中FTP文件的定时上传,定时下载(也可以说定时上传下载、定时备份)功能,对于经常使用FTP的小伙伴来说,也是非常适用的。
工具支持自动更新,压缩包只有7.62M,方便简洁,一步到位。
下载地址:IIS7服务器管理工具
简单的使用步骤可以看下面的截图,做了详细标注:
在这里插入图片描述
在这里插入图片描述

下面开始我们文章的内容

因项目现场无法部署IDE工具联调FTP服务器,开发个简单的小工具,打成jar部署联调测。一下是该工具的源代码。

package cn.org.july.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.*;
import java.net.SocketException;
import java.util.Scanner;
public class FtpTest {
private static String address = "";
private static int port = 21;
private static String userName;
private static String pwd;
private static FTPClient ftpClient;
private static String userDir = System.getProperty("user.dir");
public static void init() {
Scanner scan = new Scanner(System.in);
System.out.println("please enter the FTP service address: (请输入FTP服务地址:)");
address = scan.nextLine();
System.out.println("ftp address is ".concat(address));
System.out.println("please enter the FTP service port:(请输入FTP服务端口:)");
port = Integer.valueOf(scan.nextLine());
System.out.println("ftp port is ".concat(port + ""));
System.out.println("please enter the FTP service user: (请输入FTP服务用户:)");
userName = scan.nextLine();
System.out.println("ftp user is ".concat(userName));
System.out.println("please enter the FTP service pwd: (请输入FTP服务用户密码:)");
pwd = scan.nextLine();
System.out.println("ftp pwd is ".concat(pwd));
}
public static void connect() {
try {
ftpClient = new FTPClient();
ftpClient.setConnectTimeout(60000);
ftpClient.connect(address, port);// 连接FTP服务器
if (FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) {
if (ftpClient.login(userName, pwd)) {// 登陆FTP服务器
if (FTPReply.isPositiveCompletion(ftpClient.sendCommand(
"OPTS UTF8", "ON"))) {// 开启服务器对UTF-8的支持,如果服务器支持就用UTF-8编码,否则就使用本地编码(GBK).
ftpClient.setControlEncoding("UTF-8");
} else {
ftpClient.setControlEncoding("GBK");
}
ftpClient.enterLocalPassiveMode();// 设置被动模式
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);// 设置传输的模式,以二进制流的方式读取
ftpClient.enterLocalPassiveMode();
System.out.println("FTP服务连接成功!");
} else {
System.out.println("FTP服务用户名或密码错误!");
disConnection();
}
} else {
System.out.println("连接到FTP服务失败!");
disConnection();
}
} catch (SocketException e) {
e.printStackTrace();
disConnection();
System.out.println("FTP的IP地址可能错误,请正确配置。");
} catch (IOException e) {
e.printStackTrace();
disConnection();
System.out.println("FTP的端口错误,请正确配置。");
}
}
/**
* 关闭FTP服务链接
*
* @throws IOException
*/
public static void disConnection() {
try {
if (ftpClient.isConnected()) {
ftpClient.disconnect();
}
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 获取文件夹下的所有文件信息
*
* @param path 文件路径
*/
public static void getFTPDirectoryFiles(String path) {
FTPFile[] files = null;
try {
ftpClient.changeWorkingDirectory(path);
files = ftpClient.listFiles();
for (FTPFile file : files) {
System.out.println(file.getName());
}
} catch (Exception e) {
e.printStackTrace();
System.out.println("FTP读取数据异常!");
} finally {
//关闭连接
disConnection();
}
}
/**
* 获取文件夹下的所有文件信息
*
* @param path 文件路径
*/
public static void getFTPFile(String path, String fileName) {
InputStream in = null;
try {
ftpClient.changeWorkingDirectory(path);
FTPFile[] files = ftpClient.listFiles();
if (files.length > 0) {
in = ftpClient.retrieveFileStream(new String(fileName.getBytes(), "ISO-8859-1"));
}
writeToLocal("ftpFile".concat(File.separator).concat(System.currentTimeMillis() + "").concat(fileName), in);
} catch (Exception e) {
e.printStackTrace();
System.out.println("FTP读取数据异常!");
} finally {
//关闭连接
disConnection();
}
}
/**
* 将InputStream写入本地文件
*
* @param destination 写入本地目录
* @param input       输入流
* @throws IOException IOException
*/
public static void writeToLocal(String destination, InputStream input)
throws IOException {
int index;
byte[] bytes = new byte[1024];
String downPath = userDir.concat(File.separator).concat(destination);
File file = new File(downPath);
if (!file.exists()) {
if (!file.getParentFile().exists()) {
file.getParentFile().mkdir();
}
file.createNewFile();
}
FileOutputStream downloadFile = new FileOutputStream(downPath);
while ((index = input.read(bytes)) != -1) {
downloadFile.write(bytes, 0, index);
downloadFile.flush();
}
input.close();
downloadFile.close();
System.out.println("文件下载路径:" + downPath);
}
public static void operation() throws FileNotFoundException {
System.out.println("1:下载操作。2:上传操作。3:遍历目录下文件");
Scanner scan = new Scanner(System.in);
String exit = scan.nextLine();
if ("1".equals(exit)) {
System.out.println("ftp download path (下载路径:)");
String path = scan.nextLine();
System.out.println("ftp download path is ".concat(path));
System.out.println("ftp download fileName(下载文件名称:) ");
String fileName = scan.nextLine();
System.out.println("ftp download fileName is ".concat(fileName));
getFTPFile(path, fileName);
} else if ("2".equals(exit)) {
System.out.println("please enter the local file path(请输入本地文件路径E:/test.pdf)");
String localPath = scan.nextLine();
System.out.println("local file path is ".concat(localPath));
System.out.println("please enter the ftp file path (请输入ftp文件路径)");
String ftpPath = scan.nextLine();
System.out.println("ftp path is ".concat(ftpPath));
System.out.println("please enter ftp file name (请输入ftp文件名称)");
String fileName = scan.nextLine();
System.out.println("ftp file name is ".concat(fileName));
boolean b = uploadFile(ftpPath, fileName, new FileInputStream(new File(localPath)));
if (b) {
System.out.println("file upload success");
} else {
System.out.println("file upload fail");
}
} else if ("3".equals(exit)) {
System.out.println("please enter ftp path:(请输入FTP文件路径)");
String path = scan.nextLine();
getFTPDirectoryFiles(path);
} else {
System.out.println("操作类型错误。");
}
}
/**
* Description: 向FTP服务器上传文件
*
* @param ftpPath  FTP服务器中文件所在路径 格式: ftptest/aa
* @param fileName ftp文件名称
* @param input    文件流
* @return 成功返回true,否则返回false
*/
public static boolean uploadFile(String ftpPath,
String fileName, InputStream input) {
boolean success = false;
try {
int reply;
reply = ftpClient.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftpClient.disconnect();
return success;
}
ftpClient.setControlEncoding("UTF-8"); // 中文支持
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
ftpClient.enterLocalPassiveMode();
if (!ftpClient.changeWorkingDirectory(ftpPath)) {
System.err.println("不存在");
boolean makeDirectory = ftpClient.makeDirectory(ftpPath);
boolean changeWorkingDirectory = ftpClient.changeWorkingDirectory(ftpPath);
System.err.println(ftpPath + "创建:" + makeDirectory + ";切换:" + changeWorkingDirectory);
} else {
ftpClient.changeWorkingDirectory(ftpPath);
}
ftpClient.storeFile(fileName, input);
input.close();
ftpClient.logout();
success = true;
} catch (IOException e) {
e.printStackTrace();
} finally {
if (ftpClient.isConnected()) {
try {
ftpClient.disconnect();
} catch (IOException ioe) {
}
}
}
return success;
}
public static void main(String[] args) {
init();
connect();
try {
operation();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}

在这里插入图片描述
在这里插入图片描述

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

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/138773.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • vscode安装java运行环境_vscode eclipse对比

    vscode安装java运行环境_vscode eclipse对比vscode中怎么搭建Java开发环境?下面本篇文章给大家介绍一下VSCode配置Java开发环境的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。配置Java开发环境主要参考官方教程:https://code.visualstudio.com/docs/java/java-tutorial1.先安装JDKJDK下载地址:https://www.oracle.com/java…

  • 【设计模式】Template Method模式

    【设计模式】Template Method模式

  • 通过HTML和CSS设计一个静态网页(练习实例,附完整代码)

    通过HTML和CSS设计一个静态网页(练习实例,附完整代码)本文笔记基于「千古壹号」的GitHub项目:https://github.com/qianguyihao/web网页原址:博雅互动<!DOCTYPEhtml><htmllang=”en”><head><metacharset=”UTF-8″><metaname=”viewport”content=”…

  • mac xquartz+iterm2

    mac xquartz+iterm21.下载并安装xquartz2.配置过程参考3.点击xquartz右键自定义添加一个命令指向iterm2我这里添加的是/Applications/iTerm.app/Contents/MacOS/iTerm24.选择刚刚添加的iterm2运行,但是这样只能在xquartz中运行。此时输入echo$DISPLAY发现是:0.0,打开bash_profile…

  • Intellij Idea 主题下载(Eclectide Monokai)

    Intellij Idea 主题下载(Eclectide Monokai)从国外大神的博客上找的一个很棒的主题EclectideMonoka,感觉是在Durcula上做了很多优化,是黑色主题的升级版,通过一周的使用感觉非常爽,对方法、变量的高亮以及选中的显示等等色彩搭配挺好,分享一下

  • 卡尔曼滤波系列——(一)标准卡尔曼滤波[通俗易懂]

    卡尔曼滤波系列——(一)标准卡尔曼滤波[通俗易懂]卡尔曼滤波(KalmanFilter)是一种利用线性系统状态方程,利用对系统的观测数据,对系统状态进行最优估计的算法。由于观测数据受到系统中的噪声和干扰的影响,所以系统状态的估计过程也可看作是滤波过程。应用场景之一有利用传感器跟踪感兴趣目标的位置,传感器获取的目标距离、速度、方位角等观测值往往含有噪声。卡尔曼滤波利用目标的动态信息与观测结果相结合,抑制噪声的影响,从而获得一个关于目标位置更准确的估计,这个估计可以是对当前目标位置的估计(滤波),也可以是对于将来位置的估计(预测),也可以是对过去位置的估计(

发表回复

您的电子邮箱地址不会被公开。

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