最近写的一个JAVA实现SFTP的实例:
/*
* Created on 2009-9-14
* Copyright 2009 by www.xfok.net. All Rights Reserved
*
*/
package net.xfok.ftp;
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;
/**
* @author YangHua
* 转载请注明出处:http://www.xfok.net/2009/10/124485.html
*/
public class MySFTP {
/**
* 连接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;
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 listFiles(String directory, ChannelSftp sftp) throws SftpException{
return sftp.ls(directory);
}
public static void main(String[] args) {
MySFTP sf = new MySFTP();
String host = "192.168.0.1";
int port = 22;
String username = "root";
String password = "root";
String directory = "/home/httpd/test/";
String uploadFile = "D:\\tmp\\upload.txt";
String downloadFile = "upload.txt";
String saveFile = "D:\\tmp\\download.txt";
String deleteFile = "delete.txt";
ChannelSftp sftp=sf.connect(host, port, username, password);
sf.upload(directory, uploadFile, sftp);
sf.download(directory, downloadFile, saveFile, sftp);
sf.delete(directory, deleteFile, sftp);
try{
sftp.cd(directory);
sftp.mkdir("ss");
System.out.println("finished");
}catch(Exception e){
e.printStackTrace();
}
}
}
---------------------------------------------------------------------------------
下面是我自己写的代码,与上面的例子无关
public String save() throws Exception {
if (Struts2Utils.getRequest().getContentLength() > 4200000) {
/* 文件超过约定值 */
Struts2Utils.getResponse().getWriter().print("1");
return null;
} else {
String directory = "项目在服务器上的目录";
UploadtempAction sf = new UploadtempAction();
ChannelSftp sftp = sf.connect(host, port, username, password);
upload = new File(uploadC.replaceAll("\\\\", "\\\\\\\\"));
DateFormat format1 = new SimpleDateFormat("yyyyMMdd");
String date = format1.format(new Date());
String imageFileName = new Date().getTime() + ".jpg";
String dts = date.substring(0, 6);
String directory2 = directory + dts + "/" + date;
try {
sftp.cd(directory2);
if (!directory2.isEmpty())
try {
sftp.put(new FileInputStream(upload), imageFileName);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
} catch (SftpException sException) {
if (sftp.SSH_FX_NO_SUCH_FILE == sException.id) {
try {
System.out.println(directory);
sftp.cd(directory);
System.out.println(dts);
sftp.mkdir(dts);
sftp.cd(directory + dts);
sftp.mkdir(date);
sftp.cd(directory + dts + "/" + date);
sftp.put(new FileInputStream(upload), imageFileName);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} finally {
shimage.setPath("http://" + host + "/kaimageserver/" + dts
+ "/" + date + "/" + imageFileName);
shimage.setLevelcode(levelcode);
shimage.setShid(shid);
shimage.setIdesc(idesc);
shimage.setOldname(imageFileName);
shimageService.save(shimage);
}
JSONObject jsonData = new JSONObject();
jsonData.put("success", "true");
Struts2Utils.renderHtml(jsonData.toString());
}
return NONE;
}
分享到:
相关推荐
总之,Java结合ganymed-ssh2库,为开发者提供了强大的工具,使他们能够在安全的环境下与Linux服务器进行交互,实现文件的上传、下载、操作和删除,极大地提升了远程管理服务器的效率。在开发过程中,理解这些基本...
【标题】"SFTP定时扫描本地文件上传到Linux服务器"涉及的关键知识点主要集中在SFTP(Secure File Transfer Protocol)协议的使用、文件系统的监控以及自动化任务的执行。SFTP是一种安全的网络协议,用于在不同主机...
在这个场景中,我们关注的是如何使用Java来实现文件压缩包的上传以及在服务器上的解压缩。Java作为一种强大的编程语言,提供了丰富的库来支持这样的操作,特别是在涉及到SFTP(Secure File Transfer Protocol)时,...
本话题聚焦于如何处理Java编译后的文件,特别是如何将这些文件从本地环境上传至Linux服务器,并在服务器端进行差异分析与统计。 首先,让我们了解一下Java编译过程。在本地开发环境中,我们通常使用JDK(Java ...
本文将深入探讨如何使用Java技术实现在Linux和Windows之间进行文件的互传,以及创建一个HTML界面来支持文件的上传和下载。 首先,让我们关注Java在文件操作中的核心类:`java.io.File`、`java.nio.file`包下的`...
本文将深入探讨如何使用Java实现SFTP(Secure File Transfer Protocol)和FTP(File Transfer Protocol)进行文件的上传与下载,以满足在Linux服务器上的操作需求。 首先,FTP是一种用于在网络之间传输文件的标准...
1、资源内容:基于java实现本机和linux系统之间上传和下载文件 2、适用人群:计算机,电子信息工程、数学等专业的学习者,作为“参考资料”参考学习使用。 3、解压说明:本资源需要电脑端使用WinRAR、7zip等解压工具...
4. 在Java中,通过JSch库连接到SFTP服务器时,需要先建立一个JSch对象,然后创建一个Session(会话),并设置Session的配置属性。 5. 接着通过Session对象获取一个Channel(通道),并打开SFTP通道。此时可以利用...
在IT行业中,Java是一种广泛应用的编程语言,它不仅在企业级应用中表现出色,也能够实现各种系统级别的功能,如远程文件操作。本篇将详细探讨如何使用Java来实现Linux系统的远程拷贝功能。 首先,要实现Linux的远程...
本篇将详细介绍如何使用Java和JSch在Windows上实现对Linux服务器的文件获取。 首先,我们需要理解SSH(Secure Shell)协议。SSH是一种网络协议,用于安全地远程登录到服务器,执行命令和传输数据。JSch库实现了SSH2...
另外,可以使用`jsch`库(Jsch,Java Secure Channel)来实现SSH连接,通过SFTP协议上传文件到Linux服务器。以下是一个使用Jsch的例子: ```java JSch jsch = new JSch(); Session session = jsch.getSession(...
在IT行业中,尤其是在系统管理或开发环境中,批量上传文件到Linux服务器是一项常见的任务。这通常涉及到将一组文件从本地计算机高效地传输到多台远程Linux服务器。为了实现这一目标,我们需要掌握一些关键技术和工具...
Java远程连接Linux服务器并执行命令及上传文件功能 ...本文提供了Java远程连接Linux服务器并执行命令及上传文件功能的实现方法,并介绍了相关的知识点,包括JSch库、Apache Commons Logging库、ThreadLocal等。
1背景参考文章:Java使用SFTP和FTP两种连接方式实现对服务器的上传下载java使用JSCH连接FTP(Linux服务器)上传文件到Linux服务器Jav
Java实现上传文件到服务器指定目录的方法 ...本文介绍了使用Java实现上传文件到服务器指定目录的方法,包括引入相关依赖项、建立实体类、实现文件上传工具类等步骤。这些知识点对于Java Web开发具有重要的参考价值。
在Android平台上,通过SFTP(Secure File Transfer Protocol)与Linux服务器进行交互,实现图片文件的下载,是一项常见的任务。SFTP是一种基于SSH的安全文件传输协议,可以确保数据在传输过程中的安全性和完整性。本...
本实例源码是基于Java实现的SFTP客户端,用于连接到支持SFTP的服务器并执行文件操作,如上传、下载和管理文件。 Java作为一种广泛使用的编程语言,拥有丰富的库和工具支持各种网络通信,包括SFTP。在Java中实现SFTP...
- `put`: 上传本地文件到远程服务器。 - `rm`: 删除远程文件。 - `mkdir`: 创建远程目录。 - `rmdir`: 删除远程目录。 - `ls`: 列出远程目录内容。 这些操作都可以通过SFTP客户端工具或编程API实现。 **安全注意...
在Java编程中,有时我们需要实现一个功能,即通过代码远程登录Linux服务器并执行特定的Linux命令。这在自动化运维、远程脚本执行等场景中非常常见。本篇将详细讲解如何实现这一目标,并提供相关源码及jar包。 首先...
总的来说,这个Java SFTP项目提供了在Java环境下与Linux服务器进行文件交互的实例,对于学习和理解如何在Java中实现SFTP操作具有很好的参考价值。通过深入理解和实践,你可以更好地掌握Java与远程系统间的文件传输...