`

java通过sftp对linux服务器文件夹进行操作

    博客分类:
  • ftp
阅读更多
本文主要讲sftp对linux服务器的文件和文件夹进行操作,windows server 服务器不支持。
package com.lx.ftp;

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 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
	 */
	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;
	}

	public static void main(String[] args) throws JSchException {
		SftpUtil sf = new SftpUtil();


	}

}

maven依赖
<dependency>
			<groupId>com.jcraft</groupId>
			<artifactId>jsch</artifactId>
			<version>0.1.54</version>
		</dependency>
0
0
分享到:
评论

相关推荐

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

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

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

    4. 在Java中,通过JSch库连接到SFTP服务器时,需要先建立一个JSch对象,然后创建一个Session(会话),并设置Session的配置属性。 5. 接着通过Session对象获取一个Channel(通道),并打开SFTP通道。此时可以利用...

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

    1. **Java SFTP库**:如JSch(Java Secure Channel)库,它提供了对SSH和SFTP的支持,用于建立与远程服务器的连接,进行文件上传和下载操作。 2. **文件监控**:Java中可以使用`java.nio.file`包中的`WatchService`...

    Java实现Linux的远程拷贝

    JSch是Java的一个开源库,提供了SSH2协议的实现,允许我们通过SSH连接执行命令、传输文件等操作。在项目中引入JSch库后,我们就可以开始编写代码了。 1. **建立SSH连接** 在Java中,我们需要创建一个`JSch`实例,...

    java代码在window获取linux文件

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

    winscpSSH的开源图形化SFTP客户端

    对于Linux服务器,OpenSSH是最常见的选择。下载WinSCP安装包,完成安装后,启动程序,首次使用需要配置会话信息,包括主机名、端口号(默认22)、用户名和密码或密钥对。 ### 三、文件管理操作 1. **上传/下载**:...

    Java如何实现上传文件到服务器指定目录

    Java实现上传文件到服务器指定目录的方法 Java是一种广泛应用于Web开发的编程语言,而上传文件到服务器指定目录是Java Web开发中的一项常见任务。本文将详细介绍如何使用Java实现上传文件到服务器指定目录,并提供...

    java实现两台服务器间文件复制的方法

    此外,为了实现真正的两台服务器间的文件复制,客户端和服务器的IP地址需要根据实际情况进行修改。 此方法虽然简单,但仅适用于小文件传输。对于大文件,可能需要考虑使用分块传输、断点续传等技术来提高效率和稳定...

    linux与windows文件传输工具 flashfxp

    Linux与Windows文件传输工具FlashFXP是一款强大的FTP客户端软件,它允许用户在不同的操作系统之间方便地进行文件交换。...通过熟悉其功能和操作流程,用户可以在Linux和Windows之间轻松地进行文件管理和共享。

    Linux单机环境下HDFS伪分布式集群安装操作步骤v1.0.pdf

    6. 上传安装介质:将JDK和Hadoop的安装包上传到服务器上,可以通过SFTP等工具进行上传。 7. 安装JDK并配置环境变量:安装Java开发工具包(JDK)是运行Hadoop集群的先决条件。需要配置JAVA_HOME环境变量,确保JDK能...

    Java中FTPClient上传中文目录、中文文件名乱码问题解决方法

    2. **修改Linux服务器环境变量**: 如果FTP服务器是Linux系统,可以尝试修改服务器的LC_ALL和LANG环境变量,设置为支持中文的编码,如GBK或UTF-8。例如: ```bash export LC_ALL="zh_CN.GBK" export LANG="zh_...

    个人免费版Xftp6

    在Xftp6中,Linux作为目标系统,可以方便地进行文件上传和下载,支持Linux服务器的管理和维护。 Java是一种跨平台的编程语言,特别适合于分布式计算和企业级应用。在Linux环境中,Java可以作为开发工具或者运行环境...

    Xftp-Linux远程登录-免费的服务器上传下载工具 (永久使用版)

    Xftp是一个功能强大的SFTP、FTP 文件传输软件。使用了 Xftp 以后,MS Windows 用户能安全地在 UNIX/Linux 和 Windows PC 之间传输文件。Xftp 能同时适应初级用户和高级用户的需要。它采用了标准的 Windows 风格的...

    用kettle设计ftp上传操作手册

    建议两个都安装在同一个 java 文件夹中的不同文件夹中。 2. JDK 环境变量配置 安装完 JDK 后配置环境变量,在[计算机]→[属性]→[高级系统设置]→[高级]→[环境变量]中: ① 系统变量→新建 JAVA_HOME 变量,变量...

    xshell6+xftp.7z

    总之,Xshell6和Xftp是Linux远程管理的强大工具,它们的配合使用使得远程操作Linux服务器变得简单且高效。无论你是初学者还是经验丰富的IT专业人士,这两款工具都能帮助你更好地完成工作任务,提升工作效率。在日常...

    连接远程服务器(xshell+xftp)

    通过Xshell,用户可以在本地计算机上与远程Linux或Unix服务器进行交互,执行命令行操作,如文件管理、系统管理等。Xftp则是一款FTP/SFTP客户端,可以方便地在本地和远程服务器之间进行文件的上传和下载。 首先,...

    XFTP文件上传工具

    3. **拖放操作**:用户可以直接通过鼠标将文件或文件夹在本地和远程之间拖动,实现快速传输。 4. **批量传输**:可以一次性选择多个文件或整个目录进行上传或下载,提高了工作效率。 5. **权限管理**:用户可以在...

    5款免费的XShell替代品.docx

    Electerm 是一款基于 Electron 开发的 SSH/SFTP 客户端,支持 Linux、MAC、Windows 操作系统,开源免费。Electerm 的优点是界面简洁、易于使用,支持多种协议,包括 SSH、SFTP、Telnet 等。Electerm 还支持多种语言...

    hadoop-2.8.5.tar.gz

    然后,你需要将这些文件上传到Linux服务器,这可以借助FTP、SCP或SFTP等工具完成。 在Linux下安装配置Hadoop涉及以下关键步骤: 1. **上传文件**:使用`scp`命令或者通过FTP客户端将解压后的hadoop-2.8.5目录传输...

Global site tag (gtag.js) - Google Analytics