`

java读 sftp

    博客分类:
  • java
阅读更多
package com.ikea.utils;


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;
import com.jcraft.jsch.ChannelSftp.LsEntry;

public class SFTPUtils {
	/**
	 * 连接sftp服务器
	 * 
	 * @param host
	 *            主机
	 * @param port
	 *            端口
	 * @param username
	 *            用户名
	 * @param password
	 *            密码
	 * @return
	 */
	public ChannelSftp connect(String host, int port, String username,
			String password) {
		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;
//			sshSession.disconnect();
			System.out.println("Connected to " + host + ".");
		} catch (Exception e) {

		}
		return sftp;
	}

	/**
	 * 上传文件
	 * 
	 * @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);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

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

	public static void main(String[] args) {
		SFTPUtils sf = new SFTPUtils();
		String host = "******";
		int port = 22;
		String username = "****";
		String password = "****";
		String directory = "/****/";
		String saveFile = "";
		String downLoadDirectory = "D:\\";
		ChannelSftp sftp = null;
		Session sshSession = null;
		try {
			JSch jsch = new JSch();
			jsch.getSession(username, host, port);
			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 + ".");
			
			
			
//			sf.upload(directory, uploadFile, sftp);
//			sf.download(directory, downloadFile, saveFile, sftp);
	//		sf.delete(directory, deleteFile, sftp);
		
//			sftp.cd(directory);
			
			
			Vector<LsEntry> v = sf.listFiles(directory, sftp);
			for (LsEntry e : v) {
				if(!e.getFilename().startsWith(".")) {
					saveFile = downLoadDirectory + e.getFilename();
					sf.download(directory, e.getFilename(), saveFile, sftp);
				}
			}
			System.out.println("finished");
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			sftp.exit();
			sshSession.disconnect();
		}
	}
}
分享到:
评论

相关推荐

    java 导出csv文件并上传sftp

    JSCH是Java Secure Channel的一个实现,它允许Java应用程序进行安全的SSH连接,包括SFTP操作。 1. 添加依赖:在你的项目中引入JSCH库,如果是Maven,可在pom.xml中添加: ```xml &lt;groupId&gt;com.jcraft&lt;/groupId&gt; ...

    java 按顺序读取文件

    在Java编程语言中,按顺序读取文件是基础且重要的操作。这通常涉及到使用I/O流(Input/Output Stream)来处理文件数据。本篇文章将深入探讨如何在Java中实现按顺序读取文件,以及涉及的相关知识点。 首先,Java提供...

    Java实现IPV6地址查询

    4. **处理结果**:查询结果通常是数据库记录的ID或索引,需要进一步解析成人类可读的国家和地区名称。这可能需要额外的逻辑或者ZX库提供的转换方法。 5. **返回结果**:将解析后的地域信息设置到`IPv6Bean`对象中,...

    java源码包---java 源码 大量 实例

    Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM...

    java源码包3

    Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行...

    java源码包2

    Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行...

    java opencv 调用摄像头实现拍照及本地保存 支持上传FTP 路径配置

    使用SSL/TLS加密的FTP(FTPS)或SFTP(SSH文件传输协议)是更安全的选择。此外,密码不应硬编码在代码中,而应存储在安全的加密存储中。 10. **测试与调试**: 对于任何软件项目,测试和调试都是关键环节。可以使用...

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

    Applet钢琴模拟程序java源码 2个... while ((ch=is.read())&gt;=0){ //未读完列表,则继续 info.append((char)ch); //增加信息 …… Java实现的点对点短消息发送协议(smpp)开发包源码 70个目标文件,如题。 Java实现的放大...

    JAVA上百实例源码以及开源项目源代码

    日历表格面板 [ConfigLine.java] 控制条类 [RoundBox.java] 限定选择控件 [MonthMaker.java] 月份表算法类 [Pallet.java] 调色板,统一配色类 Java扫雷源码 Java生成自定义控件源代码 2个目标文件 Java实现HTTP连接...

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

    Applet钢琴模拟程序java源码 2个... while ((ch=is.read())&gt;=0){ //未读完列表,则继续 info.append((char)ch); //增加信息 …… Java实现的点对点短消息发送协议(smpp)开发包源码 70个目标文件,如题。 Java实现的放大...

    java源码包4

    Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行...

    java项目部署工具(linux mysql class winSCP foxmail)

    `jd-gui.exe`是一个简单的GUI工具,能够反编译`.class`文件为可读的Java源代码,这对于调试和学习他人代码很有帮助。 `Foxmail_7.0.zip`是著名的电子邮件客户端,虽然它主要是一个邮件管理工具,但在项目部署过程中...

    EditPlus 4 Java、HTML编辑器

    1. **多语言支持**:EditPlus 4支持多种编程语言,包括但不限于Java、HTML、CSS、JavaScript、PHP等,每种语言都有对应的语法高亮,让代码更加清晰易读。 2. **代码折叠**:在处理大型代码文件时,EditPlus 4提供了...

    Java 程序员眼中的 Linux.zip

    3. **权限管理**:学习Linux的权限模型,包括读、写、执行权限,以及用rwx表示的三位权限位,以及chown、chmod命令用于改变文件和目录的所有者和权限。 4. **进程管理**:掌握如何启动、停止、监控和管理进程,如ps...

    在Linux下用 mkdir 命令来创建目录和子目录的用法

    例如,`mkdir -m=r-- letter`将创建一个名为`letter`的目录,其权限设置为所有者只有读权限,用户组和其他用户没有执行和写入权限。通常,`rwxr-xr-x`代表读写执行权限,其中`r--`表示所有者只有读权限。 4. **显示...

    辅助Java开发-EditPlus软件

    - **FTP/SFTP客户端集成**:内置FTP/SFTP客户端,可以直接在编辑器内上传或下载文件,方便远程开发。 - **代码折叠**:对于复杂的代码结构,可以通过折叠代码块来简化视图。 - **自定义配色方案**:用户可以根据自己...

    JAVA开发的FTP

    6. **安全性**:考虑到FTP的安全性,可以使用FTPS(FTP over SSL/TLS)或SFTP(SSH File Transfer Protocol)提供加密传输,以防止数据被窃听。 7. **权限管理**:为不同用户提供不同的操作权限,例如限制某些用户...

    网盘存储系统

    JSTL是一套标准标签库,提供了各种功能,如循环、条件判断、XML处理等,使得JSP页面更易读,更符合MVC(Model-View-Controller)设计模式。 在【网盘存储系统】中,可能涉及到的技术还包括: 4. **Servlet**:作为...

    文件操作及所需jar

    此外,文件操作也可能涉及网络文件系统(NFS)、FTP、SFTP等远程文件系统,这时需要相应的协议库支持。 总的来说,文件操作是Java编程中的基本技能,理解并熟练掌握相关API和概念对于任何Java开发者来说都至关重要...

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

    例如,可以使用Java的JSch库来实现SFTP文件传输,或者使用Apache Commons Net库来实现FTP操作。 总之,Java实现两台服务器间文件复制的方法涉及网络编程和文件I/O,理解这些基本概念是实现跨服务器文件复制的关键。...

Global site tag (gtag.js) - Google Analytics