`

java对sftp文件进行上传、下载、删除等操作,附详细demo

    博客分类:
  • java
阅读更多
这是自己总结的一个类,包含连接sftp,上传,下载等操作,附件附有jar包


package com.patronli.web.service;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.Properties;
import java.util.Vector;
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.SftpException;

/**
 * 
 * @author patronli
 *
 */
public class FtpService {
	/**
	 * 连接sftp服务器
	 * 
	 * @param host
	 *            主机
	 * @param port
	 *            端口
	 * @param username
	 *            用户名
	 * @param password
	 *            密码
	 * @return
	 */
	public ChannelSftp connect(String host, int port, String username,
			String password) {
		System.out.println("开始连接sftp");
		ChannelSftp sftp = null;
		try {
			JSch jsch = new JSch();
			jsch.getSession(username, host, port);
			Session sshSession = jsch.getSession(username, host, port);
			System.out.println("Session created.");
			sshSession.setPassword(password);
			Properties sshConfig = new Properties();
			sshConfig.put("StrictHostKeyChecking", "no");
			sshSession.setConfig(sshConfig);
			sshSession.connect();
			System.out.println("Session connected.");
			System.out.println("Opening Channel.");
			Channel channel = sshSession.openChannel("sftp");
			channel.connect();
			sftp = (ChannelSftp) channel;
			System.out.println("Connected to " + host + ".");
			System.out.println("连接sftp成功..");
		} catch (Exception e) {
			System.out.println("连接失败");
			e.printStackTrace();
		}
		return sftp;
	}

	/**
	 * 上传文件
	 * 
	 * @param directory
	 *            上传的目录
	 * @param uploadFile
	 *            要上传的文件
	 * @param sftp
	 */
	public void upload(String directory, String uploadFile, ChannelSftp sftp) {
		System.out.println("进入方法,开始读取文件");
		try {
			sftp.cd(directory);
			File file = new File(uploadFile);
			System.out.println("开始上传报表文件" + file.getName());
			sftp.put(new FileInputStream(file), file.getName());
			System.out.println("上传报表文件" + file.getName() + "完毕");
			System.out.println("上传报表文件成功");
		} catch (Exception e) {
			System.out.println("上传报表文件失败");
			e.printStackTrace();
		}
	}

	/**
	 * 下载文件
	 * 
	 * @param directory
	 *            下载目录
	 * @param downloadFile
	 *            下载的文件
	 * @param saveFile
	 *            存在本地的路径
	 * @param sftp
	 */
	public void download(String directory, ChannelSftp sftp, String path) {// sftp路径,链接,保存的路径+文件名
		try {
			sftp.cd(directory);
			File file = new File(path);
			sftp.get(path, new FileOutputStream(file));
			System.out.println("下载成功:" + path);
		} catch (Exception e) {
			System.out.println("下载文件出现异常:::");
			e.printStackTrace();
		}
	}

	/**
	 * 删除文件
	 * 
	 * @param directory
	 *            要删除文件所在目录
	 * @param deleteFile
	 *            要删除的文件
	 * @param sftp
	 */
	public void delete(String directory, String deleteFile, ChannelSftp sftp) {
		try {
			sftp.cd(directory);
			sftp.rm(deleteFile);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 列出目录下的文件
	 * 
	 * @param directory
	 *            要列出的目录
	 * @param sftp
	 * @return
	 * @throws SftpException
	 */
	public Vector listFiles(String directory, ChannelSftp sftp)
			throws SftpException {
		return sftp.ls(directory);
	}

	public void deal(int judge) {
		String directory = "";
		String host = "101.231.206.140";// 服务器ip地址
		String username = "177760236";
		String password = "123456";
		int port = 21121;// 端口号
		String fileName = "patronli.txt";
		String localUrl = "F:\\";// 文件下载到本地的地址,虚拟机上的格式/home/fy_flg/reportFile/
		String path = localUrl + fileName;// 路径+文件名
		ChannelSftp sftp = connect(host, port, username, password);
		if (judge == 1) {// 表示下载
			directory = "/download/";// sftp操作文件的目录
			download(directory, sftp,path);// 下载文件--sftp目录,要下载的文件名字,下载到的地方,
		} else {
			directory = "/upload/";// sftp操作文件的目录
			upload(directory, path, sftp);// 上传--sftp目录,要上传文件的地址
		}
	}
  public static void main(String[] args) {
	  FtpService sf = new FtpService();
	  sf.deal(1);
}
}
0
1
分享到:
评论

相关推荐

    Sftp文件上传demo

    在这个“Sftp文件上传demo”中,我们将深入探讨如何使用SFTP进行文件上传操作。 首先,我们需要了解SFTP的基本概念。SFTP通过SSH连接建立一个安全通道,用于执行文件管理操作,如上传、下载、重命名和删除文件。与...

    FTP与SFTP文件上传Demo

    通过阅读和分析"FTP与SFTP文件上传Demo",你可以学习到如何在实际项目中安全有效地进行文件传输。同时,这也能帮助你更好地理解网络安全和隐私保护的重要性,特别是在当今数据安全日益受到关注的时代。

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    文件操作,数据压缩,文件传输 Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java...

    java 读取FTP服务器文件

    在实际开发中,你可能还需要处理更多细节,例如重试机制、异常处理、文件上传、文件删除等。了解这些知识点后,你就能在Web服务器和Linux环境下实现与FTP服务器的交互,有效地管理和读取远程文件。

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    文件操作,数据压缩,文件传输 Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java...

    sftpDemo.zip

    4. **更改SFTP服务器文件**:这可能指的是对服务器上的文件进行重命名、移动、删除等操作。SFTP API提供了对远程文件系统进行各种操作的接口。 5. **myeclipse项目工程**:MyEclipse是集成开发环境,用于编写Java...

    java Ftp上传下载

    5. **上传文件**:在Java中,首先需要将本地文件读入字节数组,然后调用FTPClient的`storeStream()`方法,传入目标文件名和字节流,完成文件上传。 6. **下载文件**:下载文件时,先调用`retrieveStream()`方法获取...

    Ftp应用程序案例DEMO

    客户端通过建立连接请求与FTP服务器交互,执行上传、下载、列出目录、删除文件等操作。服务器端则响应这些请求,处理文件操作,并将结果返回给客户端。 FTP协议使用两种传输模式:主动模式(Port模式)和被动模式...

    Java 实现实时监听文件夹是否有新文件增加并上传服务器功能

    在Java中,文件上传通常使用各种框架(如Apache Commons FileUpload、Spring的MultipartFile等)或者通过Socket编程实现自定义的上传协议。 5. 阻塞式IO流使用 阻塞式IO流是Java中实现文件操作的传统方式。以...

    SSH2 实例demo

    JSch库提供了SFTPClient接口,通过这个接口可以实现文件的上传、下载、重命名和删除等操作。 5. **命令执行**:SSH2可以执行远程服务器上的命令。在Java中,你可以创建一个Exec通道,通过这个通道发送命令并接收...

    ftp客户端示例程序源代码

    - 源代码中通常包括登录验证、文件上传下载逻辑、目录操作等模块。 - FTP连接的建立和关闭,以及异常处理也是重要部分。 - 示例程序可能使用FTP库,如Java的Apache Commons Net,Python的ftplib等,这些库提供了...

    springboot-FtpUtil-master_springbootftputil_ftp_attentioniwd_DEM

    2. **FTP工具类**:`FtpUtil`是核心工具类,它包含了一系列静态方法,如`connect()`用于建立连接,`uploadFile()`和`downloadFile()`分别用于文件上传和下载,以及`disconnect()`用于关闭连接。这些方法内部会使用`...

    ftp需要的jar 包

    这些jar包提供了FTP客户端的功能,允许开发者通过编程方式连接到FTP服务器,执行上传、下载、删除等操作。 在Java中,常见的FTP客户端库有Apache Commons Net和Java内置的`java.net`包中的`FTPClient`类。Apache ...

Global site tag (gtag.js) - Google Analytics