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();
}
}
}
分享到:
相关推荐
JSCH是Java Secure Channel的一个实现,它允许Java应用程序进行安全的SSH连接,包括SFTP操作。 1. 添加依赖:在你的项目中引入JSCH库,如果是Maven,可在pom.xml中添加: ```xml <groupId>com.jcraft</groupId> ...
在Java编程语言中,按顺序读取文件是基础且重要的操作。这通常涉及到使用I/O流(Input/Output Stream)来处理文件数据。本篇文章将深入探讨如何在Java中实现按顺序读取文件,以及涉及的相关知识点。 首先,Java提供...
4. **处理结果**:查询结果通常是数据库记录的ID或索引,需要进一步解析成人类可读的国家和地区名称。这可能需要额外的逻辑或者ZX库提供的转换方法。 5. **返回结果**:将解析后的地域信息设置到`IPv6Bean`对象中,...
Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM...
Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行...
Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行...
使用SSL/TLS加密的FTP(FTPS)或SFTP(SSH文件传输协议)是更安全的选择。此外,密码不应硬编码在代码中,而应存储在安全的加密存储中。 10. **测试与调试**: 对于任何软件项目,测试和调试都是关键环节。可以使用...
Applet钢琴模拟程序java源码 2个... while ((ch=is.read())>=0){ //未读完列表,则继续 info.append((char)ch); //增加信息 …… Java实现的点对点短消息发送协议(smpp)开发包源码 70个目标文件,如题。 Java实现的放大...
日历表格面板 [ConfigLine.java] 控制条类 [RoundBox.java] 限定选择控件 [MonthMaker.java] 月份表算法类 [Pallet.java] 调色板,统一配色类 Java扫雷源码 Java生成自定义控件源代码 2个目标文件 Java实现HTTP连接...
Applet钢琴模拟程序java源码 2个... while ((ch=is.read())>=0){ //未读完列表,则继续 info.append((char)ch); //增加信息 …… Java实现的点对点短消息发送协议(smpp)开发包源码 70个目标文件,如题。 Java实现的放大...
Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行...
`jd-gui.exe`是一个简单的GUI工具,能够反编译`.class`文件为可读的Java源代码,这对于调试和学习他人代码很有帮助。 `Foxmail_7.0.zip`是著名的电子邮件客户端,虽然它主要是一个邮件管理工具,但在项目部署过程中...
1. **多语言支持**:EditPlus 4支持多种编程语言,包括但不限于Java、HTML、CSS、JavaScript、PHP等,每种语言都有对应的语法高亮,让代码更加清晰易读。 2. **代码折叠**:在处理大型代码文件时,EditPlus 4提供了...
3. **权限管理**:学习Linux的权限模型,包括读、写、执行权限,以及用rwx表示的三位权限位,以及chown、chmod命令用于改变文件和目录的所有者和权限。 4. **进程管理**:掌握如何启动、停止、监控和管理进程,如ps...
例如,`mkdir -m=r-- letter`将创建一个名为`letter`的目录,其权限设置为所有者只有读权限,用户组和其他用户没有执行和写入权限。通常,`rwxr-xr-x`代表读写执行权限,其中`r--`表示所有者只有读权限。 4. **显示...
- **FTP/SFTP客户端集成**:内置FTP/SFTP客户端,可以直接在编辑器内上传或下载文件,方便远程开发。 - **代码折叠**:对于复杂的代码结构,可以通过折叠代码块来简化视图。 - **自定义配色方案**:用户可以根据自己...
6. **安全性**:考虑到FTP的安全性,可以使用FTPS(FTP over SSL/TLS)或SFTP(SSH File Transfer Protocol)提供加密传输,以防止数据被窃听。 7. **权限管理**:为不同用户提供不同的操作权限,例如限制某些用户...
JSTL是一套标准标签库,提供了各种功能,如循环、条件判断、XML处理等,使得JSP页面更易读,更符合MVC(Model-View-Controller)设计模式。 在【网盘存储系统】中,可能涉及到的技术还包括: 4. **Servlet**:作为...
此外,文件操作也可能涉及网络文件系统(NFS)、FTP、SFTP等远程文件系统,这时需要相应的协议库支持。 总的来说,文件操作是Java编程中的基本技能,理解并熟练掌握相关API和概念对于任何Java开发者来说都至关重要...
例如,可以使用Java的JSch库来实现SFTP文件传输,或者使用Apache Commons Net库来实现FTP操作。 总之,Java实现两台服务器间文件复制的方法涉及网络编程和文件I/O,理解这些基本概念是实现跨服务器文件复制的关键。...