目录
背景
业务需要从 SFTP 服务器上上传、下载、删除文件等功能,通过查阅资料及手敲代码,实现了操作 SFTP 的基本功能。
提示:以下是本篇文章正文内容,下面案例可供参考
一、sftp是什么?
SFTP 是一种数据流链接,提供文件访问、传输和管理功能的网络传输协议。它允许用户以文件操作的方式(如文件的增、删、改、查、传送等)与另一主机相互通信。
二、代码示例
代码如下:
import java.io.IOException;
public class SftpTool {
public static void main(String[] args) {
// 定义在 SFTP 服务器的文件名
String[] downloadFiles = {"te1.txt", "te2.txt", "te3.txt"};
// 获取指定的远程路径
String remotePath = "/data/file/STA/PCRM/20240303/";
// 获取指定的本地路径
String localPath = "/app1/";
// 调用下载文件方法
for (String fileName : downloadFiles) {
downloadFile(remotePath + fileName, localPath);
}
// 定义要上传到 SFTP 的本地文件名
String[] uploadFiles = {"te4.txt", "te5.txt", "te6.txt"};
// 获取指定的远程路径
remotePath = "/data/file/STA/PCRM/20240303/";
// 获取指定的本地路径
localPath = "/app1/";
// 调用上传文件的方法
for (String filename : uploadFiles) {
uploadFile(localPath + filename, remotePath);
}
}
// 下载文件的方法
public static void downloadFile(String remoteFilePath, String localFilePath) {
try {
// 设置 SFTP 服务器信息
String ftpUser = "test";
String ftpPass = "test";
String ftpIp = "10.192.00.90"; //需要改成个人对应的服务器ip
String ftpPort = "22";
// 构建 SFTP 下载命令
String downloadSftpCommand = "sshpass -p \"" + ftpPass + "\" sftp -oPort=" + ftpPort + " " +
ftpUser + "@" + ftpIp;
String downloadCommands = "lcd " + localFilePath + "\n" + // 切换到本地目录
"get " + remoteFilePath + "\nexit"; // 使用 get 命令下载指定文件
// 合并 SFTP 下载命令
String downloadFullCommand = downloadSftpCommand + " <<< $" + "'" + downloadCommands + "'";
System.out.println(downloadFullCommand); // 启动进程执行下载命令 ProcessBuilder downloadProcessBuilder=new
ProcessBuilder("/bin/bash", "-c", downloadFullCommand);
Process downloadProcess = downloadProcessBuilder.start();
int downloadExitCode = downloadProcess.waitFor(); // 检查下载命令执行结果
if (downloadExitCode == 0) {
System.out.println("文件下载成功!" + remoteFilePath);
} else {
System.err.println("文件下载失败,命令执行错误码:" + downloadExitCode);
}
} catch (IOException |
InterruptedException e) {
e.printStackTrace();
}
}
// 上传文件的方法
public static void uploadFile(String localFilePath, String remoteFilePath) {
try {
// 设置 SFTP 服务器信息
String ftpUser = "test";
String ftpPass = "test";
String ftpIp = "10.192.00.90"; //需要改成个人对应的服务器ip
String ftpPort = "22";
// 构建 SFTP 上传命令
String uploadSftpCommand = "sshpass -p \"" + ftpPass + "\" sftp -oPort=" + ftpPort + " " +
ftpUser + "@" + ftpIp + ":" + remoteFilePath;
String uploadCommands = "put " + localFilePath + "\nexit"; // 使用 put 命令上传文件
// 合并 SFTP 上传命令
String uploadFullCommand = uploadSftpCommand + " <<< $" + "'" +
uploadCommands + "'";
// 启动进程执行上传命令
ProcessBuilder uploadProcessBuilder = new ProcessBuilder("/bin/bash", "-c",
uploadFullCommand);
Process uploadProcess = uploadProcessBuilder.start();
int uploadExitCode = uploadProcess.waitFor();
// 检查上传命令执行结果
if (uploadExitCode == 0) {
System.out.println("文件上传成功!" + localFilePath + " -> " + remoteFilePath);
} else {
System.err.println("文件上传失败,命令执行错误码:" + uploadExitCode);
}
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
}
}
三、解释
个人理解:sftp是一个文件传输协议,在日常开发过程中,我们可以在linux服务器内创建一个sftp的专用用户,限制这个用户的目录访问,将这个用户改造成一个文件处理的专用用户,从而在不影响其他用户的使用的前提下,完成对应的工作。
总结
以上就是今天要讲的内容,本文仅仅简单介绍了Java代码完成sftp上传的任务,可以修改对应代码的数据,完成不同服务器的文件的上传和下载。