import java.io.File;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Vector;
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.ChannelSftp.LsEntry;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.SftpATTRS;
public final class MySFTP {
static String _root = "/";
static com.jcraft.jsch.Session _sshSession;
public static ChannelSftp connect(String host, String userName,
String password, int port, String root) throws Exception {
ChannelSftp sftp = null;
try {
JSch jsch = new JSch();
_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 + ".");
System.out.println("链接到SFTP成功》》》++++++" + host);
sftp.cd(root);
_root += root;
return sftp;
} catch (Exception e) {
throw e;
}
}
public static void disconnect(ChannelSftp sftp) {
if (sftp != null) {
if (sftp.isConnected()) {
sftp.disconnect();
System.out.println("sftp关闭连接!!!!!====" + sftp);
} else if (sftp.isClosed()) {
}
}
if (_sshSession != null && _sshSession.isConnected()) {
_sshSession.disconnect();
}
System.out.println("sftp 已经关闭");
}
public boolean isConnected(ChannelSftp sftp) {
return (sftp != null) && sftp.isConnected() && !sftp.isClosed()
&& (_sshSession != null) && _sshSession.isConnected();
}
private static Vector _list(String dir, ChannelSftp sftp) {
try {
return sftp.ls(dir);
} catch (Exception e) {
return null;
}
}
private static Vector _list(ChannelSftp sftp) {
try {
return sftp.ls(sftp.pwd());
} catch (Exception e) {
return null;
}
}
public static List list(String dir, ChannelSftp sftp) {
try {
Vector ls = _list(dir, sftp);
return _buildFiles(ls);
} catch (Exception e) {
return null;
}
}
private static List _buildFiles(Vector ls) throws Exception {
if (ls != null && ls.size() >= 0) {
List list = new ArrayList();
for (int i = 0; i < ls.size(); i++) {
LsEntry f = (LsEntry) ls.get(i);
String nm = f.getFilename();
if (nm.equals(".") || nm.equals(".."))
continue;
SftpATTRS attr = f.getAttrs();
Map m = new HashMap();
if (attr.isDir()) {
m.put("dir", new Boolean(true));
} else {
m.put("dir", new Boolean(false));
}
m.put("name", nm);
list.add(m);
}
return list;
}
return null;
}
public static List list(ChannelSftp sftp) {
try {
Vector ls = _list(sftp);
return _buildFiles(ls);
} catch (Exception e) {
return null;
}
}
public static boolean cd(String dirs, ChannelSftp sftp) throws Exception {
try {
String path = dirs;
if (path.indexOf("\\") != -1) {
path = dirs.replaceAll("\\", "/");
}
String pwd = sftp.pwd();
if (pwd.equals(path))
return true;
sftp.cd(_root);
if(_root.equals(dirs))return true;
String[] paths = path.split("/");
for (int i = 0; i < paths.length; i++) {
String dir = paths[i];
if(isEmpty(dir))continue;
sftp.cd(dir);
}
return true;
} catch (Exception e) {
throw e;
}
}
public static boolean isExist(String root, String fileOrDir,
ChannelSftp sftp) throws Exception {
try {
boolean exist = false;
boolean cdflg = false;
String pwd = sftp.pwd();
if (pwd.indexOf(root) == -1) {
cdflg = true;
sftp.cd(root);
}
Vector ls = _list(root, sftp);
if (ls == null || ls.size() <= 0) {
for (int i = 0; i < ls.size(); i++) {
LsEntry f = (LsEntry) ls.get(i);
String nm = f.getFilename();
if (nm.equals(fileOrDir)) {
exist = true;
break;
}
}
}
if (cdflg) {
sftp.cd("..");
}
return exist;
} catch (Exception e) {
throw e;
}
}
public static boolean isEmpty(String s) {
return s == null || "".equals(s.trim());
}
public static boolean upload(String uploadFile, ChannelSftp sftp)
throws Exception {
java.io.InputStream is = null;
try {
File file = new File(uploadFile);
is = new FileInputStream(file);
sftp.put(is, file.getName());
return true;
} catch (Exception e) {
throw e;
}finally{
try {
if(is!=null){
is.close();
is=null;
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
public static void download(String dir, String downloadFile,
String saveFile, ChannelSftp sftp) {
try {
boolean isCd = false;
if (!isEmpty(dir)) {
sftp.cd(dir);
isCd = true;
}
// File file = new File(saveFile);
// sftp.get(downloadFile, new FileOutputStream(file));
sftp.get(downloadFile, saveFile);
if (isCd)
sftp.cd("..");
System.out.println("下载文件成功!!!!!====" + sftp);
} catch (Exception e) {
e.printStackTrace();
System.out.println("下载文件失败!!!!!=*******" + sftp);
}
}
public static boolean mkDir(String filepath, ChannelSftp sftp)
throws Exception {
try {
String path = filepath;
if (path.indexOf("\\") != -1) {
path = filepath.replaceAll("\\", "/");
}
String[] paths = path.split("/");
for (int i = 0; i < paths.length; i++) {
String dir = paths[i];
Vector ls = _list(dir, sftp);
if (ls == null || ls.size() <= 0) {
sftp.mkdir(dir);
}
sftp.cd(dir);
}
} catch (Exception e1) {
throw e1;
}
return true;
}
public static boolean rm(String deleteFile, ChannelSftp sftp)
throws Exception {
try {
Vector ls = _list(sftp);
if (ls != null && ls.size() > 0) {
for (int i = 0; i < ls.size(); i++) {
LsEntry f = (LsEntry) ls.get(i);
String nm = f.getFilename();
if (!nm.equals(deleteFile)) {
continue;
}
SftpATTRS attr = f.getAttrs();
if (attr.isDir()) {
if (rmdir(nm, sftp)) {
sftp.rmdir(nm);
}
} else {
sftp.rm(nm);
}
}
}
return true;
} catch (Exception e) {
throw e;
}
}
private static boolean rmdir(String dir, ChannelSftp sftp) throws Exception {
try {
sftp.cd(dir);
Vector ls = _list(sftp);
if (ls != null && ls.size() > 0) {
for (int i = 0; i < ls.size(); i++) {
LsEntry f = (LsEntry) ls.get(i);
String nm = f.getFilename();
if (nm.equals(".") || nm.equals(".."))
continue;
SftpATTRS attr = f.getAttrs();
if (attr.isDir()) {
if (rmdir(nm, sftp)) {
sftp.rmdir(nm);
}
} else {
sftp.rm(nm);
}
}
}
sftp.cd("..");
return true;
} catch (Exception e) {
throw e;
}
}
}
import java.util.List;
import java.util.Map;
import com.jcraft.jsch.ChannelSftp;
public class TestMySFTP {
public static void main(String[] args) throws Exception {
String userName = "ftpuser"; // FTP 登录用户名
String password = "123"; // FTP 登录密码
String host = "192.168.0.147"; // FTP 服务器地址IP地址
int port = 22; // FTP 端口
String root = "gzfw";
TestMySFTP app = new TestMySFTP();
ChannelSftp sftp = MySFTP.connect(host, userName, password, port, root);
//app.upload(sftp);
//app.removeFile(sftp);
app.download(sftp);
MySFTP.disconnect(sftp);
}
void upload(ChannelSftp sftp){
try {
String dir = "a/b/c";
boolean flg = MySFTP.mkDir(dir, sftp);
if(flg){
String pwd = sftp.pwd();
System.out.println(pwd);
System.out.println(sftp.getHome());
System.out.println(sftp.lpwd());
//sftp.cd(".");
//sftp.cd("..");
String uploadFile = "d:/sql.txt";
MySFTP.upload(uploadFile, sftp);//上传
System.out.println("上传-成功.");
}
// dir = "a";
// flg = MySFTP.cd(dir, sftp);
// if(flg){
// String uploadFile = "d:/dwsgsDelDup12.sql";
// MySFTP.upload(uploadFile, sftp);//上传
// System.out.println("上传-成功.");
// }
} catch (Exception e) {
System.out.println("--上传失败..");
e.printStackTrace();
}
}
void removeFile(ChannelSftp sftp){
try {
String dirs = "a/b";
boolean flg = MySFTP.cd(dirs, sftp);
if(flg){
String deleteFile = "c";
MySFTP.rm(deleteFile, sftp);
System.out.println("删除-成功.");
}
} catch (Exception e) {
System.out.println("--删除失败..");
e.printStackTrace();
}
}
void download(ChannelSftp sftp){
try {
boolean flg = MySFTP.cd("/gzfw", sftp);
if(flg){
List files = MySFTP.list(sftp);
if(files!=null&&files.size()>0){
for(int i=0;i<files.size();i++){
Map item = (Map)files.get(i);
String f = (String)item.get("name");
boolean isDir = ((Boolean)item.get("dir")).booleanValue();
System.out.println("---本目录---"+f+" 是:"+isDir);
if(isDir){
List subfiles = MySFTP.list(f,sftp);
for(int j=0;j<subfiles.size();j++){
Map item1 = (Map)subfiles.get(j);
boolean isDir1 = ((Boolean)item1.get("dir")).booleanValue();
if(isDir1)continue;
String ff = (String)item1.get("name");
System.out.println("---2----"+ff);
MySFTP.download(f,ff, "e:/ftp/"+ff, sftp);
}
}
MySFTP.rm(f, sftp);
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
分享到:
相关推荐
Java操作SFTP(Secure File Transfer Protocol)主要依赖于第三方库,如JSch。JSch是一个纯Java实现的SSH2库,允许开发人员连接到支持SFTP的服务器,进行文件的上传、下载以及执行其他相关操作。本文将详细介绍如何...
1分让你得到sftp常用操作工具,工具实现如下操作: 1)得到当前工作目录地址 2)改变目录为配置的远程目录 3)取文件目录列表 4)取文件列表 5)下载文件 6)复制文件 7)删除文件 8)目录是否存在,文件是否存在 9)移动文件 ...
以上就是使用Java和JSch库操作SFTP的基本步骤,你可以根据实际需求扩展这个`SFTPTool`类,例如增加异常处理、超时设置、文件重命名等功能。在实际应用中,记得根据你的SFTP服务器配置调整连接参数,并确保安全性,...
在Java编程中,SFTP(Secure File ...综上所述,Java操作SFTP上传和下载文件主要涉及到JSch库的使用,包括连接配置、通道创建、文件操作以及断开连接等步骤。在实际开发中,应结合具体需求,优化代码并确保安全性。
在Java编程中,实现Secure File Transfer Protocol (SFTP) 功能是常见的需求,尤其是在处理远程文件操作时。本文将详细讲解如何使用开源库JSch来实现在Java中进行SFTP的上传、下载以及删除文件的方法。 JSch是一个...
本文将深入探讨如何使用Java实现SFTP(Secure File Transfer Protocol)和FTP(File Transfer Protocol)进行文件的上传与下载,以满足在Linux服务器上的操作需求。 首先,FTP是一种用于在网络之间传输文件的标准...
JAVA SFTP文件上传、下载及批量下载实例 在本篇文章中,我们将详细介绍JAVA SFTP文件上传、下载及批量下载的实例,包括相关的概念、API介绍、代码实现等方面的内容。 首先,我们需要了解什么是SFTP?SFTP(Secure ...
本篇文章将深入探讨如何使用Java进行SFTP的文件上传与下载操作。 首先,为了在Java中实现SFTP,我们需要一个支持SFTP的库,例如JSch(Java Secure Channel)。JSch是一个开源的Java库,它实现了SSH2协议,包括SFTP...
本文将详细探讨如何使用Java实现SFTP的文件上传和下载功能,以及如何利用jcraft库来完成这一任务。 首先,jcraft是一个日本开发者团队创建的开源项目,提供了Java实现的SSH2库,其中包括对SFTP的支持。在本示例中,...
在Java编程环境中,SFTP(Secure File Transfer Protocol)是一种安全的文件传输协议,常用于在本地计算机和远程服务器之间交换文件。Swing是Java提供的一个用于构建桌面应用程序的图形用户界面(GUI)工具包。本篇...
Java使用SFTP(Secure File Transfer Protocol)进行文件操作是一种常见的任务,特别是在远程服务器间安全传输文件时。SFTP是SSH(Secure Shell)协议的一部分,提供了一种加密的网络通信方式,确保了数据在传输过程...
JSch是一个纯Java实现的SSH2库,它允许Java应用程序连接到支持SSH协议的服务器,执行SFTP操作。`jsch-0.1.43.jar`是JSch库的JAR文件,包含所有必要的类和方法来处理SSH连接和SFTP会话。 首先,我们需要在项目中引入...
在Java编程中,SFTP(Secure File Transfer Protocol)是一种安全的文件传输协议,它基于SSH(Secure Shell)来提供服务,常用于在不同系统间安全地传输文件。本篇文章将详细探讨如何使用Java通过SFTP模式实现FTP的...
JSch - Java 实现的 SFTP(文件上传详解篇) JSch 是 Java Secure Channel 的缩写,JSch 是一个 SSH2 的纯 Java 实现。JSch 允许您连接到一个 SSH 服务器,并且可以使用端口转发、X11 转发、文件传输等,当然您也...
`Ftp.java`可能是一个封装了SFTP操作的类,`properties.properties`是配置文件,包含SFTP连接的相关参数。`打包运行jar文件.txt`可能是关于如何构建和运行项目成可执行JAR的说明。 实现上述功能时,还需要注意异常...
1. **JSch (Java Secure Channel)**: JSch 是一个纯Java实现的SSH2库,它允许用户执行SFTP(Secure File Transfer Protocol)操作。SFTP是基于SSH协议的文件传输协议,提供了安全的文件传输能力。JSch-0.1.54.jar是...
本实例源码是基于Java实现的SFTP客户端,用于连接到支持SFTP的服务器并执行文件操作,如上传、下载和管理文件。 Java作为一种广泛使用的编程语言,拥有丰富的库和工具支持各种网络通信,包括SFTP。在Java中实现SFTP...
首先,为了在Java中使用SFTP,我们需要一个支持SFTP的库,例如JSch(Java Secure Channel)。JSch是一个开源的Java库,提供了SSH2协议的实现,包括SFTP服务。在描述中提到的“jar包”可能就是JSch的库文件。要使用...
1背景参考文章:Java使用SFTP和FTP两种连接方式实现对服务器的上传下载java使用JSCH连接FTP(Linux服务器)上传文件到Linux服务器Jav
在IT行业中,SFTP(Secure File...通过阅读和理解源码,你可以更好地了解Java中如何处理SFTP连接和文件操作。请确保在实际使用时遵循最佳实践,例如使用安全的SSH密钥对,避免明文存储密码,并处理可能出现的异常情况。