`

SFTP服务器的文件管理(转)

    博客分类:
  • Java
阅读更多

来源(http://forhope.iteye.com/blog/798754)

 

导入包jsch-0.1.43.jar

package com.network.manage.device.util;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.SftpException;

public class SFTPUtil {
	private static JSch jSch = new JSch();
	private static ChannelSftp sftp = null;
	private static Channel channel = null;
	private static Session session = null;

	public static boolean login(String hostname, int port, String username,
			String password) {
		try {
			session = jSch.getSession(username, hostname, port);
			session.setPassword(password);

			Properties sshConfig = new Properties();
			sshConfig.put("StrictHostKeyChecking", "no");
			session.setConfig(sshConfig);
			session.connect();

			channel = session.openChannel("sftp");
			channel.connect();

			sftp = (ChannelSftp) channel;
			return true;
		} catch (JSchException e) {
			System.err.println("SSH方式连接FTP服务器时有JSchException异常!");
			System.err.println(e.getMessage());
			return false;
		}
	}

	public static boolean downloadFile(String hostname, int port,
			String username, String password, String remotePath,
			String remoteFilename, String localFilename) {
		FileOutputStream output = null;
		boolean success = false;
		try {
			// SSH方式登录FTP服务器
			success = login(hostname, port, username, password);

			//登录失败
			if (!success) {
				return success;
			}

			if (null != remotePath && remotePath.trim() != "") {
				sftp.cd(remotePath);
			}

			File localFile = new File(localFilename);
			//有文件和下载文件重名
			if (localFile.exists()) {
				sftp.disconnect();
				System.err.println("文件: " + localFilename + " 已经存在!");
				return success;
			}

			output = new FileOutputStream(localFile);
			sftp.get(remoteFilename, output);
			success = true;
		} catch (SftpException e) {
			System.err.println("接收文件时有SftpException异常!");
			e.printStackTrace();
			System.err.println(e.getMessage());
			return success;
		} catch (IOException e) {
			System.err.println("接收文件时有I/O异常!");
			System.err.println(e.getMessage());
			return success;
		} finally {
			try {
				if (null != output) {
					output.close();
				}
			} catch (IOException e) {
				System.err.println("关闭文件时出错!");
				System.err.println(e.getMessage());
			}
			if (sftp.isConnected()) {
				sftp.disconnect();
			}
			if (channel.isConnected()) {
				channel.disconnect();
			}
			if (session.isConnected()) {
				session.disconnect();
			}
		}
		return success;
	}

	public static boolean uploadFile(String hostname, int port,
			String username, String password, String remotePath,
			String remoteFilename, InputStream input) {
		boolean success = false;
		try {
			// SSH方式登录FTP服务器
			success = login(hostname, port, username, password);

			//登录失败
			if (!success) {
				return success;
			}

			// 更改服务器目录
			if (null != remotePath && remotePath.trim() != "") {
				sftp.cd(remotePath);
			}

			// 发送文件
			sftp.put(input, remoteFilename);
			success = true;
		} catch (SftpException e) {
			System.err.println("发送文件时有SftpException异常!");
			e.printStackTrace();
			System.err.println(e.getMessage());
			return success;
		} catch (Exception e) {
			System.err.println("发送文件时有异常!");
			System.err.println(e.getMessage());
			return success;
		} finally {
			try {
				if (null != input) {
					input.close();
				}
			} catch (IOException e) {
				System.err.println("关闭文件时出错!");
				System.err.println(e.getMessage());
			}
			if (sftp.isConnected()) {
				sftp.disconnect();
			}
			if (channel.isConnected()) {
				channel.disconnect();
			}
			if (session.isConnected()) {
				session.disconnect();
			}
		}
		return success;
	}

	public static boolean deleteFile(String hostname, int port, String username,
			String password, String remotePath, String remoteFilename) {
		boolean success = false;
		try {
			// SSH方式登录FTP服务器
			success = login(hostname, port, username, password);

			//登录失败
			if (!success) {
				return success;
			}

			// 更改服务器目录
			if (null != remotePath && remotePath.trim() != "") {
				sftp.cd(remotePath);
			}

			// 删除文件
			sftp.rm(remoteFilename);
			success = true;
		} catch (SftpException e) {
			System.err.println("删除文件时有SftpException异常!");
			e.printStackTrace();
			System.err.println(e.getMessage());
			return success;
		} catch (Exception e) {
			System.err.println("删除文件时有异常!");
			System.err.println(e.getMessage());
			return success;
		} finally {
			if (sftp.isConnected()) {
				sftp.disconnect();
			}
			if (channel.isConnected()) {
				channel.disconnect();
			}
			if (session.isConnected()) {
				session.disconnect();
			}
		}
		return success;
	}
}

分享到:
评论

相关推荐

    绿色简易的单文件SFTP服务器

    标题中的“绿色简易的单文件SFTP服务器”指的是一个轻量级、无需安装且只包含一个执行文件的SFTP(Secure File Transfer Protocol)服务器软件。SFTP是一种在不安全网络上安全传输文件的安全协议,它基于SSH(Secure...

    windows的sftp文件管理服务器

    在IT领域,Windows操作系统上的SFTP(Secure File Transfer Protocol)文件管理服务器是一种安全的数据传输解决方案,它基于SSH(Secure Shell)协议,确保了文件传输过程中的数据加密,从而提高了安全性。...

    windows脚本SFTP上传文件至备份服务器方案

    - WinSCP的作用是通过公私钥验证的方式登录SFTP服务器,并上传压缩后的备份文件。 5. **设定定时任务**: - 控制面板 → 管理工具 → 计划任务 → 添加计划任务 → 设置每日运行脚本备份文件 → 确保即使在未登录...

    基于sshd构建sftp服务器

    总结来说,基于sshd构建的SFTP服务器是一种强大的工具,它提供了安全的文件传输和远程命令执行能力。通过定制化配置和扩展,可以满足各种业务需求。在实际应用中,务必注意安全配置,以确保系统的稳定性和数据的安全...

    SFTP定时扫描本地文件上传到Linux服务器

    4. **配置文件管理**:Java程序可能需要读取配置文件来获取SFTP服务器的地址、用户名、密码或私钥等连接信息,这可以通过Java的`Properties`类或者第三方库如Apache Commons Configuration实现。 5. **状态判断**:...

    bat脚本使用Putty工具sftp上传文件.zip

    这样,我们就设置了一个定时任务,到了指定时间,系统会自动运行`sftp.bat`脚本,通过psftp将文件上传到SFTP服务器。 注意:为了安全性,不建议在脚本中直接写入密码,可以考虑使用密钥对或者通过其他安全方式来...

    基于QSSH的sftp文件管理器 源代码

    本项目是一个基于QSSH库的SFTP文件管理器,它允许用户通过Qt框架安全地访问和管理远程服务器上的文件。 【QSSH】 QSSH是Qt库的一个扩展,提供了SSH(Secure Shell)连接和会话管理的功能。SSH是一种网络协议,用于...

    SFTP上传下载文件工具

    SFTP(Secure File Transfer ...其强大的功能和易用性使得文件管理变得更加高效和安全。在日常工作中,无论是开发人员部署代码、设计人员分享资源还是系统管理员维护服务器,这样的工具都能大大提高他们的生产力。

    C#sftp实现对文件的操作

    本篇文章将深入探讨如何使用C#实现在SFTP协议下进行文件的操作,包括连接SFTP服务器、添加、删除和移动文件。 首先,要连接到SFTP服务器,我们需要一个支持SFTP的库。在C#中,常用的库有SharpSSH和SSH.NET。这两个...

    sftp服务器.zip

    除了基本的SFTP服务器搭建,你还可以进一步配置如日志记录、访问控制列表、防火墙规则等高级特性,以增强服务器的安全性和管理效率。记住,定期更新SSH服务器软件和系统补丁是保持服务器安全的关键。 总之,搭建...

    在windows下搭建SFTP服务器

    通过以上步骤,我们就可以在Windows环境下成功搭建一个SFTP服务器,并使用freeSSHD进行管理。这个过程不仅提高了数据传输的安全性,还使得远程文件管理变得更加便捷。在实际应用中,可以根据具体需求调整配置,以...

    SFTP.rar_VB sftp_c sftp_sftp_sftp服务器源码_vc sf

    标签中的"vb_sftp c_sftp sftp sftp服务器源码 vc_sf"进一步强调了这个资源与VB、C以及SFTP服务器源码的关系,同时也提到了VC++的简称"vc"和可能的文件分享平台"Pudn"的标识"sf"。 压缩包内的文件...

    C#Sftp服务器Dll.rar

    在IT行业中,C#是一种广泛...理解并熟练运用这些知识点,开发者可以利用C# Sftp服务器Dll创建高效且安全的SFTP服务器,满足企业对文件传输的需求。同时,了解SFTP协议的细节和C#的面向对象特性对于开发工作至关重要。

    sftp_manger批量服务器管理器

    【sftp_manger批量服务器管理器】是一款专为IT专业人士设计的高效工具,它整合了SFTP(Secure File Transfer Protocol)功能,使得用户能够轻松地对多台远程服务器进行批量管理和维护。SFTP是一种安全的文件传输协议...

    Sftp文件上传demo

    SFTP通过SSH连接建立一个安全通道,用于执行文件管理操作,如上传、下载、重命名和删除文件。与FTP(File Transfer Protocol)不同,FTP在明文中传输数据,容易遭受中间人攻击,而SFTP则提供了端到端的安全性。 要...

    java上传文件到linux服务器,操作linux服务器上文件,下载linux服务器文件,删除linux服务器文件

    **下载Linux服务器文件** 下载文件的过程与上传类似,只是使用了`get()`方法。该方法会将服务器上的文件下载到本地。 ```java sftp.get(远程文件路径, 本地保存路径); ``` **删除Linux服务器文件** 删除文件可以...

    小巧好用的 sftp 服务器

    SFTP服务器是提供SFTP服务的软件,允许用户通过SFTP协议连接并管理远程文件系统。 提到"小巧好用的 sftp 服务器",我们可能想到的是那些轻量级、资源占用少、易于配置和管理的SFTP服务器软件。这类服务器通常适用于...

    云服务器文件管理工具

    总的来说,"云服务器文件管理工具"结合了FTP和SFTP等安全传输协议,提供了高效、安全的文件管理解决方案。配合如FileZilla这样的专业FTP客户端,用户可以在云服务器环境中实现流畅、便捷的工作流程,从而提升生产力...

    win7和xp专用SFTP服务器及安装使用教程

    在Windows操作系统上,尤其是Win7和XP系统,SFTP服务器的设置和使用对于远程文件管理至关重要。本教程将详细介绍如何在这些平台上安装和使用SFTP服务器,以及解决可能出现的中文乱码问题。 首先,我们要使用的软件...

    SFTP搭建软件

    压缩包中的三个文件可能是这些SFTP服务器的安装程序。`WinSSHD5-Inst_6.44.exe`很显然是WinSSHD的安装包,而`FTPServer.exe`和`msftpsrvr.exe`可能是两个轻量级FTP服务器的可执行文件,它们可能需要单独运行和配置。...

Global site tag (gtag.js) - Google Analytics