`

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 源码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,理解这些基本概念是实现跨服务器文件复制的关键。...

    EditPlus 3 编辑工具 Java C# VB

    对于Java、C#和VB等编程语言,它能够自动识别并用不同的颜色突出显示关键字、变量、函数等,使得代码更加清晰易读。这对于程序员来说,大大提高了编写和阅读代码的效率。 其次,EditPlus 3拥有强大的代码完成功能。...

Global site tag (gtag.js) - Google Analytics