在 Java 中,您可以使用 JSch(Java Secure Channel)库 来连接和操作 SFTP 服务器。以下是一个完整的示例代码,展示如何使用 Java 接入 SFTP 服务器并上传文件。
1.服务器上加入SFTP------(小白篇 1)
2.加入SFTP 用户------(小白篇 2)
3.代码加入SFTP JAVA —(小白篇3)
4.代码加入SFTP Python —(小白篇4
5.代码加入SFTP Go —(小白篇5)
Maven 引入依赖
在您的 pom.xml
文件中添加 JSch 依赖:
<dependency><groupId>com.jcraft</groupId><artifactId>jsch</artifactId><version>0.1.55</version>
</dependency>
Java 示例代码
以下代码展示了如何连接 SFTP 服务器、上传文件、下载文件和列出目录内容:
import com.jcraft.jsch.*;import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.Vector;public class SftpClient {private static final String SFTP_HOST = "your-server-ip"; // 服务器地址private static final int SFTP_PORT = 22; // 默认端口private static final String SFTP_USER = "newuser"; // 用户名private static final String SFTP_PASSWORD = "yourpassword"; // 密码public static void main(String[] args) {Session session = null;ChannelSftp sftpChannel = null;try {// 1. 创建 JSch 对象JSch jsch = new JSch();// 2. 建立会话session = jsch.getSession(SFTP_USER, SFTP_HOST, SFTP_PORT);session.setPassword(SFTP_PASSWORD);// 3. 配置 StrictHostKeyCheckingjava.util.Properties config = new java.util.Properties();config.put("StrictHostKeyChecking", "no");session.setConfig(config);// 4. 连接服务器session.connect();System.out.println("Session connected.");// 5. 打开 SFTP 通道Channel channel = session.openChannel("sftp");channel.connect();System.out.println("SFTP channel connected.");sftpChannel = (ChannelSftp) channel;// 上传文件String localFile = "C:/path/to/local/file.txt"; // 本地文件路径String remoteDir = "/uploads/"; // 远程目录uploadFile(sftpChannel, localFile, remoteDir);// 下载文件String remoteFile = "/uploads/file.txt"; // 远程文件路径String downloadDir = "C:/path/to/download/"; // 本地下载目录downloadFile(sftpChannel, remoteFile, downloadDir);// 列出远程目录文件listFiles(sftpChannel, remoteDir);} catch (Exception e) {e.printStackTrace();} finally {// 关闭连接if (sftpChannel != null) {sftpChannel.disconnect();}if (session != null) {session.disconnect();}}}// 上传文件private static void uploadFile(ChannelSftp sftpChannel, String localFile, String remoteDir) {try (FileInputStream fis = new FileInputStream(localFile)) {sftpChannel.put(fis, remoteDir + localFile.substring(localFile.lastIndexOf("/") + 1));System.out.println("File uploaded successfully.");} catch (Exception e) {e.printStackTrace();}}// 下载文件private static void downloadFile(ChannelSftp sftpChannel, String remoteFile, String localDir) {try (FileOutputStream fos = new FileOutputStream(localDir + remoteFile.substring(remoteFile.lastIndexOf("/") + 1))) {sftpChannel.get(remoteFile, fos);System.out.println("File downloaded successfully.");} catch (Exception e) {e.printStackTrace();}}// 列出目录文件private static void listFiles(ChannelSftp sftpChannel, String remoteDir) {try {Vector<ChannelSftp.LsEntry> fileList = sftpChannel.ls(remoteDir);System.out.println("Files in directory:");for (ChannelSftp.LsEntry entry : fileList) {System.out.println(" - " + entry.getFilename());}} catch (Exception e) {e.printStackTrace();}}
}
代码说明
- 连接服务器:
- 使用
JSch
库建立 SSH 连接。 - 提供用户名、密码和主机 IP 地址。
- 使用
- 上传文件:
- 使用
sftpChannel.put()
方法将本地文件上传到服务器。
- 使用
- 下载文件:
- 使用
sftpChannel.get()
方法将远程文件下载到本地。
- 使用
- 列出目录内容:
- 使用
sftpChannel.ls()
方法获取远程目录中的文件列表。
- 使用
- 安全选项:
- 配置
StrictHostKeyChecking
为no
,以忽略主机密钥检查(生产环境中建议添加已知主机密钥验证)。
- 配置
测试
- 将代码中的
SFTP_HOST
、SFTP_USER
和SFTP_PASSWORD
替换为实际的 SFTP 服务器信息。 - 修改
localFile
和remoteDir
为实际的文件路径和远程目录。
运行代码后,您应该能够上传、下载文件并列出远程目录的内容。
常见问题
- 权限不足:
- 确保服务器上的目录权限正确,用户具有读写权限。
- 连接失败:
- 检查服务器的防火墙设置,确保开放了端口 22。
- 依赖问题:
- 确保 Maven 依赖已正确引入,或手动添加 JSch 的 JAR 包。