`

通过sftp操作Linux服务器上的文件(java)

阅读更多
本文为实现对linux服务器文件的操作。windows服务器不支持。

引入jar包:jsch-0.1.42.jar
package com.csvreader.sftp;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.List;
import java.util.Properties;
import java.util.Vector;

import org.junit.Test;

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 {
	/**
	 * 
	 * @param host
	 * @param port
	 * @param username
	 * @param password
	 * @return
	 * @throws JSchException
	 */
	public ChannelSftp connect(String host, int port, String username,String password) throws JSchException {
		// 1.声明连接Sftp的通道
		ChannelSftp nChannelSftp = null;
		// 2.实例化JSch
		JSch nJSch = new JSch();
		// 3.获取session
		Session nSShSession = nJSch.getSession(username, host, port);
		System.out.println("Session创建成功");
		// 4.设置密码
		nSShSession.setPassword(password);
		// 5.实例化Properties
		Properties nSSHConfig = new Properties();
		// 6.设置配置信息
		nSSHConfig.put("StrictHostKeyChecking", "no");
		// 7.session中设置配置信息
		nSShSession.setConfig(nSSHConfig);
		// 8.session连接
		nSShSession.connect();
		System.out.println("Session已连接");
		// 9.打开sftp通道
		Channel channel = nSShSession.openChannel("sftp");
		// 10.开始连接
		channel.connect();
		nChannelSftp = (ChannelSftp) channel;
		System.out.println("连接到主机" + host + ".");
		return nChannelSftp;
	}

	/**
	 * 文件重命名
	 * @param directory
	 * @param oldname
	 * @param newname
	 * @param sftp
	 */
	public void renameFile(String directory, String oldname, String newname,ChannelSftp sftp) {
		try {
			sftp.cd(directory);
			sftp.rename(oldname, newname);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 上传文件
	 * @param directory
	 * @param uploadFile
	 * @param sftp
	 */
	public void upload(String directory, String uploadFile, ChannelSftp sftp) {
		try {
			sftp.cd(directory);
			File file = new File(uploadFile);
			sftp.put(new FileInputStream(file), file.getName());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 下载文件
	 * @param directory
	 * @param downloadFile
	 * @param saveFile
	 * @param sftp
	 */
	public void download(String directory, String downloadFile,String saveFile, ChannelSftp sftp) {
		try {
			sftp.cd(directory);
			File file = new File(saveFile);
			sftp.get(downloadFile, new FileOutputStream(file));

		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 删除文件
	 * @param directory
	 * @param deleteFile
	 * @param sftp
	 */
	public void delete(String directory, String deleteFile, ChannelSftp sftp) {
		try {
			sftp.cd(directory);
			sftp.rm(deleteFile);
			System.out.println("删除成功");
		} catch (Exception e) {
			System.out.println("删除失败");
			e.printStackTrace();
		}
	}

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

	/**
	 * 下载文件夹下面的所有文件
	 * 
	 * @param viDirectory 文件夹
	 * @param viHost 主机名
	 * @param viPort 端口号
	 * @param viUserName 用户名
	 * @param viPassWord 用户密码
	 * @param viSaveDir 保存路径
	 * @return
	 */
	@Test
	public List<String> downloadDirFile(String viDirectory, String viHost,int viPort, String viUserName, String viPassWord, String viSaveDir) {
		ChannelSftp nChannelSftp = null;
		List<String> nFileNameList = null;
		try {
			// 1.实例化nSftpUtil工具类
			SftpUtil nSftpUtil = new SftpUtil();
			// 2.建立Sftp通道
			nChannelSftp = nSftpUtil.connect(viHost, 22, viUserName, viPassWord);
			// 3.获取目录下面所有文件
			Vector nVector = nChannelSftp.ls(viDirectory);
			// 4.循环遍历文件
			for (int i = 0; i < nVector.size(); i++) {
				// 5.进入服务器文件夹
				nChannelSftp.cd(viDirectory);
				// 6.实例化文件对象
				String nFileName = nVector.get(i).toString().substring(56, nVector.get(i).toString().length());
				if (!nFileName.contains("csv")) {
					continue;
				}
				File nFile = new File(viSaveDir + File.separator + nFileName);
				// 7.下载文件
				nChannelSftp.get(nFileName, new FileOutputStream(nFile));
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			nChannelSftp.disconnect();
		}
		return nFileNameList;
	}


附件附jar包
1
0
分享到:
评论

相关推荐

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

    Linux服务器是一种基于Linux操作系统并提供网络服务的计算机系统,而Java作为一种跨平台的编程语言,能够通过SSH(Secure Shell)协议与Linux服务器进行通信。SSH是一种安全的网络协议,用于在网络中传输命令和数据...

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

    【标题】"SFTP定时扫描本地文件上传到Linux服务器"涉及的关键知识点主要集中在SFTP(Secure File Transfer Protocol)协议的使用、文件系统的监控以及自动化任务的执行。SFTP是一种安全的网络协议,用于在不同主机...

    使用Java向服务器上传文件压缩包并实现解压缩

    JSch是一个纯Java实现的SSH2库,它允许用户连接到SFTP服务器,进行文件传输、创建目录、删除文件等操作。首先,我们需要在项目中引入JSch库,然后创建一个`Session`对象,设置用户名、密码或密钥对,并连接到SFTP...

    Android实现使用sftp下载linux服务器上的图片文件源码

    在Android平台上,通过SFTP(Secure File Transfer Protocol)与Linux服务器进行交互,实现图片文件的下载,是一项常见的任务。SFTP是一种基于SSH的安全文件传输协议,可以确保数据在传输过程中的安全性和完整性。本...

    详解Java使用Jsch与sftp服务器实现ssh免密登录

    利用这些方法,我们可以很方便地对远程服务器上的文件进行操作。 为了安全起见,实际部署时应避免将"StrictHostKeyChecking"设置为"no",这样会导致系统接受任何主机的密钥,增加了被中间人攻击的风险。更好的做法...

    java代码在window获取linux文件

    在Java编程环境中,有时我们需要在Windows系统中远程访问Linux服务器以获取或操作文件。`JSch`库提供了一个这样的解决方案,它是一个纯Java实现的SSH2库,允许开发者连接到远程计算机并执行命令,传输文件等。本篇将...

    java代码sftp和ftp上传下载文件

    本文将深入探讨如何使用Java实现SFTP(Secure File Transfer Protocol)和FTP(File Transfer Protocol)进行文件的上传与下载,以满足在Linux服务器上的操作需求。 首先,FTP是一种用于在网络之间传输文件的标准...

    Java在Windows下导出xml文件到Linux服务器上

    综上所述,从Windows系统导出XML文件至Linux服务器涉及到Java中的路径处理、文件操作、网络I/O和远程文件系统访问等多个知识点。通过熟练掌握这些技术,开发者可以实现跨平台的数据交换,提高系统的灵活性和兼容性。

    Java版Linux文件上传下载、windows本地文件上传下载

    后端服务器(如Java Servlet或Spring MVC Controller)接收到请求后,可以使用前面提到的Java文件操作API处理上传的文件,并将其保存到服务器的指定位置。 对于文件下载,HTML中可以创建一个链接,指向服务器上的...

    Java实现Linux的远程拷贝

    通过打开一个SFTP通道,我们可以像操作本地文件系统一样操作远程文件: ```java ChannelSftp sftp = (ChannelSftp) session.openChannel("sftp"); sftp.connect(); sftp.cd("/path/to/remote/directory"); // ...

    java通过代码登录远程linux服务器并执行linux命令源码以及jar包

    在Java编程中,有时我们需要实现一个功能,即通过代码远程登录Linux服务器并执行特定的Linux命令。这在自动化运维、远程脚本执行等场景中非常常见。本篇将详细讲解如何实现这一目标,并提供相关源码及jar包。 首先...

    基于sshd构建sftp服务器

    本教程将详细介绍如何使用Apache的sshd库构建一个支持SFTP操作的服务器,同时也支持通过SSH进行Linux命令执行。 **sshd简介** Apache MINA SSHD是一个开源项目,提供了一个纯Java实现的SSH-2协议服务器和客户端。它...

    Java运用ganymed-ssh2-build210.jar包远程连接操作linux服务器

    本文档的标题是"Java 运用 Ganymed-SSH2 库远程连接操作 Linux 服务器",这意味着我们将使用 Java 语言来远程连接 Linux 服务器,并使用 Ganymed-SSH2 库来实现远程连接和文件传输。 描述解释 描述部分提到使用 ...

    Java远程连接Linux服务器并执行命令及上传文件功能

    Java远程连接Linux服务器并执行命令及上传文件功能 本文主要介绍了如何使用Java语言远程连接Linux服务器并执行命令及上传文件的功能。该功能主要通过使用JSch库和Apache Commons Logging库来实现远程连接和文件上传...

    java实现本机和linux系统之间上传和下载文件

    1、资源内容:基于java实现本机和linux系统之间上传和下载文件 2、适用人群:计算机,电子信息工程、数学等专业的学习者,作为“参考资料”参考学习使用。 3、解压说明:本资源需要电脑端使用WinRAR、7zip等解压工具...

    java编译后的文件上传至linux服务端

    本话题聚焦于如何处理Java编译后的文件,特别是如何将这些文件从本地环境上传至Linux服务器,并在服务器端进行差异分析与统计。 首先,让我们了解一下Java编译过程。在本地开发环境中,我们通常使用JDK(Java ...

    java 读取FTP服务器文件

    在Java编程环境中,读取FTP(File Transfer Protocol)服务器上的文件是一项常见的任务,尤其是在Web服务器和Linux系统环境下。FTP提供了一种可靠的方式来传输文件,使得应用程序可以远程访问和操作存储在FTP服务器...

    java操作Linux环境

    通过SSH,开发者可以在本地计算机上编写Java程序,然后安全地与远程Linux服务器进行交互。 JSCH库是Java中的一个开源项目,它提供了SSH2的API,使得Java开发者能够轻松实现以下功能: 1. **建立SSH连接**:JSCH...

    jeasonchan#Blog#Java:sftp和ftp的client端文件操作1

    1背景参考文章:Java使用SFTP和FTP两种连接方式实现对服务器的上传下载java使用JSCH连接FTP(Linux服务器)上传文件到Linux服务器Jav

    基于Java的实例源码-用Java写的SFTP代码.zip

    本实例源码是基于Java实现的SFTP客户端,用于连接到支持SFTP的服务器并执行文件操作,如上传、下载和管理文件。 Java作为一种广泛使用的编程语言,拥有丰富的库和工具支持各种网络通信,包括SFTP。在Java中实现SFTP...

Global site tag (gtag.js) - Google Analytics