
package jsch;
import javaioFile;
import javaioFileInputStream;
import javautilProperties;
import comjcraftjschChannel;
import comjcraftjschChannelSftp;
import comjcraftjschJSch;
import comjcraftjschJSchException;
import comjcraftjschSession;
public class Test {
protected String host;//sftp服务器ip
protected String username;//用户名
protected String password;//密码
protected String privateKey;//密钥文件路径
protected String passphrase;//密钥口令
protected int port = 22;//默认的sftp端口号是22
/
获取连接
@return channel
/
public ChannelSftp connectSFTP() {
JSch jsch = new JSch();
Channel channel = null;
try {
if (privateKey != null && !""equals(privateKey)) {
//使用密钥验证方式,密钥可以使有口令的密钥,也可以是没有口令的密钥
if (passphrase != null && ""equals(passphrase)) {
jschaddIdentity(privateKey, passphrase);
} else {
jschaddIdentity(privateKey);
}
}
Session session = jschgetSession(username, host, port);
if (password != null && !""equals(password)) {
sessionsetPassword(password);
}
Properties sshConfig = new Properties();
sshConfigput("StrictHostKeyChecking", "no");// do not verify host key
sessionsetConfig(sshConfig);
// sessionsetTimeout(timeout);
sessionsetServerAliveInterval(92000);
sessionconnect();
//参数sftp指明要打开的连接是sftp连接
channel = sessionopenChannel("sftp");
channelconnect();
} catch (JSchException e) {
eprintStackTrace();
}
return (ChannelSftp) channel;
}
/
上传文件
@param directory
上传的目录
@param uploadFile
要上传的文件
@param sftp
/
public void upload(String directory, String uploadFile, ChannelSftp sftp) {
try {
sftpcd(directory);
File file = new File(uploadFile);
sftpput(new FileInputStream(file), filegetName());
} catch (Exception e) {
eprintStackTrace();
}
}
/
下载文件
@param directory
下载目录
@param downloadFile
下载的文件
@param saveFile
存在本地的路径
@param sftp
/
public void download(String directory, String downloadFile,
String saveFile, ChannelSftp sftp) {
try {
sftpcd(directory);
sftpget(downloadFile,saveFile);
} catch (Exception e) {
eprintStackTrace();
}
}
/
删除文件
@param directory
要删除文件所在目录
@param deleteFile
要删除的文件
@param sftp
/
public void delete(String directory, String deleteFile, ChannelSftp sftp) {
try {
sftpcd(directory);
sftprm(deleteFile);
} catch (Exception e) {
eprintStackTrace();
}
}
public void disconnected(ChannelSftp sftp){
if (sftp != null) {
try {
sftpgetSession()disconnect();
} catch (JSchException e) {
eprintStackTrace();
}
sftpdisconnect();
}
}
}
我就是用sftp传输的,Android下,就是用手机录音,然后把录下来的音频文件保存到服务器里,给你源代码吧,
import javaioFile;import javaioFileInputStream;
import javaioFileOutputStream;
import javautilDate;
import javautilProperties;
import javautilVector;
import androidcontentContext;
import androidtelephonyTelephonyManager;
import androidtextformatDateFormat;
import androidtextformatTime;
import comjcraftjschChannel;
import comjcraftjschChannelSftp;
import comjcraftjschJSch;
import comjcraftjschSession;
import comjcraftjschSftpException;
public class Sftp_upload {
/
连接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();
jschgetSession(username, host, port);
Session sshSession = jschgetSession(username, host, port);
Systemoutprintln("Session created");
sshSessionsetPassword(password);
Properties sshConfig = new Properties();
sshConfigput("StrictHostKeyChecking", "no");
sshSessionsetConfig(sshConfig);
sshSessionconnect();
Systemoutprintln("Session connected");
Systemoutprintln("Opening Channel");
Channel channel = sshSessionopenChannel("sftp");
channelconnect();
sftp = (ChannelSftp) channel;
Systemoutprintln("Connected to " + host + "");
//Systemoutprintln("登录成功");
} catch (Exception e) {
}
return sftp;
}
/
上传文件
@param directory 上传的目录
@param uploadFile 要上传的文件
@param sftp
/
public void upload(String directory, String uploadFile, ChannelSftp sftp) {
try {
sftpcd(directory);
File file=new File(uploadFile);
String currentTime=DateFormatformat("yyyy_MM_dd_hh_mm_ss", new Date())toString(); //获取时间
String filename=currentTime+"wav"; //文件名为当前时间来保存
sftpput(new FileInputStream(file), filename);
Systemoutprintln("上传成功!");
} catch (Exception e) {
eprintStackTrace();
}
}
/
下载文件
@param directory 下载目录
@param downloadFile 下载的文件
@param saveFile 存在本地的路径
@param sftp
/
public void download(String directory, String downloadFile,String saveFile, ChannelSftp sftp) {
try {
sftpcd(directory);
File file=new File(saveFile);
sftpget(downloadFile, new FileOutputStream(file));
} catch (Exception e) {
eprintStackTrace();
}
}
/
删除文件
@param directory 要删除文件所在目录
@param deleteFile 要删除的文件
@param sftp
/
public void delete(String directory, String deleteFile, ChannelSftp sftp) {
try {
sftpcd(directory);
sftprm(deleteFile);
} catch (Exception e) {
eprintStackTrace();
}
}
/
列出目录下的文件
@param directory 要列出的目录
@param sftp
@return
@throws SftpException
/
public Vector listFiles(String directory, ChannelSftp sftp) throws SftpException{
return sftpls(directory);
}
//上传文件
public static void Sftp_server(String file,String imsi) {
String Imsi = imsi;
Sftp_upload sf = new Sftp_upload();
String host = "192168160";
int port = 22;
String username = "root";
String password = "123456";
String directory = "/data/test/wav";
//String uploadFile = "c:\\audiocheck\\testwav";
String uploadFile = file;
// String downloadFile = "/data/test/wav/lamesh";
// String saveFile = "c:\\audiocheck\\contenttxt";
// String deleteFile = "c:\\audiocheck\\contenttxt";
ChannelSftp sftp=sfconnect(host, port, username, password);
//sfdownload(directory, downloadFile, saveFile, sftp);
//sfdelete(directory, deleteFile, sftp);
try{
sftpcd(directory);
sftpmkdir(Imsi); //创建目录
Systemoutprintln("finished");
}catch(Exception e){
eprintStackTrace();
}
directory = "/data/test/wav/"+imsi;
sfupload(directory, uploadFile, sftp);//上传文件到服务器
}
}
这个就是源代码,
然后上传的时候用的代码
//imsi也就是 手机的型号来创建文件夹的,这些你都可以修改的。String file = mWorkdir+"/"+"resFilewav"; //要上传的文件
Sftp_uploadSftp_server(file,imsi); //上传文件
Systemoutprintln("已上传");
1、无法执行多条命令,每次ChannelExec在connect前要先setCommand,最后一次的设置生效。
2、由于第一个原因的限制,如果执行的命令需要环境变量(如JAVA_HOME),就没有办法了。这种方式执行基本的ls,ps之类的命令没有问题,需要复杂的环境变量时有点力不从心。
如果你的JAVA部署的tomcat,就是你要查找文件的服务器,那就用:
File file = new File("文件路径")。
如果你本地的JAVA想要访问远程的一个服务器的文件是否存在,就得用如下方法:
URL url = new URL(“文件路径:可以是本地服务器的路径,也可以是远程服务器的路径”)
>
//message = urlcongetHeaderField(0);
//文件存在‘>
Long TotalSize=LongparseLong(urlcongetHeaderField("Content-Length"));
if (TotalSize>0){
return true;
}else{
return false;
}
Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
>
如何在windows获取linux服务器上的文件,之前的一篇博客以及提到可以利用Jsch实现ssh来进行远程获取,这篇主要讲利用Apache配置>
以上就是关于Apache SSHD实现SFTP服务端,客户端访问进行远程文件上传下载全部的内容,包括:Apache SSHD实现SFTP服务端,客户端访问进行远程文件上传下载、你好!我也碰到了SFTP传输,纯java可以,Android就不行,纠结好几天了,希望你能尽快帮我解答,谢谢!、Java使用JSch,ChannelExec取不到结果,在while(true)中死循环。ChannelShell结果难处理,求指点等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)