使用JSch sftp 连接的时候, 程序卡在ganymed ssh2 jschSession.connect(); 不动 也没报错,程序显示正在运行

如果您查看本文后有所收获,欢迎您永久收藏到自己的账号中,同时也欢迎您分享给您的朋友
相关文章推荐
(Ctrl+Enter提交) &&
已有0人在此发表见解
&在& 16:53收藏到了
版权所有,转载本站文章还请保留本站文章或作者地址。 &&
· 蜀ICP备号-1
点击名称选择存放文件夹<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&7575人阅读
java(46)
网上有很多成型的例子,在这里提供几个不错的连接
网sftp服务器上传文件 需借助jsch.jar包 &
JSch 实现了三种传输模式
1,完全覆盖模式
2,恢复模式,(类&#20284;于断点上传)因外部原因导致文件上传中断,下次上传时会接着上次的继续上传
3,追加模式,若发现文件已经存在,则在目标文化后追加。
ChannelSftp类是JSch实现sftp核心类,实现了很多方法。
put():&&&&& 文件上传
get():&&&&& 文件下载
cd():&&&&&& 进入指定目录
ls():&&&&&& 得到指定目录下的文件列表
rename():&& 重命名指定文件或目录
rm():&&&&&& 删除指定文件
mkdir():&&& 创建目录
rmdir():&&& 删除目录
put方法把文件放在服务器上,put ,get方法都有多个重载方法。请认真阅读源代码。
JSch是Java Secure Channel的缩写。JSch是一个SSH2的纯Java实现。它允许你连接到一个SSH服务器,并且可以使用端口转发,X11转发,文件传输等,当然你也可以集成它的功能到你自己的应用程序
SFTP是Secure File TransferProtocol的缩写,安全文件传送协议。可以为传输文件提供一种安全的加密方法。SFTP 为 SSH的一部份,是一种传输文件到服务器的安全方式。SFTP是使用加密传输认证信息和传输的数据,所以,使用SFTP是非常安全的。但是,由于这种传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低得多,如果您对网络安全性要求更高时,可以使用SFTP代替FTP。
详细讲解sftp文件上传
JAVA实现SFTP的实例
在开发过程中,遇到连接错误的异常。
com.jcraft.jsch.JSchException:Session.connect: java.io.IOException:
代码执行到&&&& sshSession.connect();程序报错,在网上搜了大半天未果。后来请教一个朋友,换了一个jar包,问题得到解决。当问题出现的时候,我们总是局限在一个小小的问题上,而不会跳出这个圈,全局的考虑,这样往往浪费很多时间。^_^ 他说了一句话,对我启发很大,工作开不开心和能力无关。&#21564;&#21564;~~
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:366237次
积分:5295
积分:5295
排名:第3197名
原创:158篇
转载:18篇
评论:559条
(1)(3)(1)(10)(4)(4)(1)(8)(3)(1)(11)(7)(3)(5)(7)(10)(8)(1)(8)(12)(11)(14)(11)(23)(9)你好!我也碰到了SFTP传输,纯java可以,Android就不行,纠结好几天了,希望你能尽快帮我解答,谢谢!_百度知道
你好!我也碰到了SFTP传输,纯java可以,Android就不行,纠结好几天了,希望你能尽快帮我解答,谢谢!
提问者采纳
;FileInputStream(file); &
&import&&要列出的目录&&下载目录&//&&.println(&{&&nbsp.out.SOpening&123456&deleteF.out.jcraft,&e;String&
& &&String&&ChannelSftp&public&port).DSftp_upload&directory:\\audiocheck\\//获取时间
&要上传的文件&*&+&//System.ls(directory).toString();directory.println(&uploadFile&import&
&下载文件&&(Exception&String&nbsp,然后上传的时候用的代码//imsi也就是&String&&public&e)&=&&/**&&nbsp.Ccatch&nbsp.Cusername&@param&System.1;new&download(String&nbsp.V&sshSession,imsi);&listFiles(String&@param&nbsp.//connect(String&=& try{
&&=&&port,&&nbsp.openChannel(&Connected&//String&imsi)&主机&nbsp.printStackTrace();&}&&&&nbsp,String&*&*&@return&*&//要上传的文件Sftp_&
&@param&上传的目录&Sftp_server(String&&=&nbsp.sftp.connect();@param&
&&=&catch&com.directory&downloadFile&nbsp.密码&nbsp,String&{
&username&nbsp,&nbsp.connect(String&try&*&&&&nbsp,& &directory&&&*&upload(String&);&&;ChannelSftp&&import&& &用户名&nbsp.directory&&
&nbsp.Phost&downloadFile&&Session&saveFile&int&class&throws&nbsp.Sftp_server(&sftp&/data/test/wav/ &&sf&&Date());String&&return&
&nbsp,&to&nbsp,&&nbsp,&SftpException&nbsp,这些你都可以修改的。String&directory.println(&String&&Vector&);import& &&&android.=&(Exception&&&&e)&//&&
&StrictHostKeyChecking&quot. &
&nbsp,&sftp).io.downloadFChannelSftp&sftp&=&&*/&nbsp,&
&nbsp.getSession(password)&nbsp.c;void&}&nbsp.*&;}catch(Exception&}&nbsp.&&&nbsp.out.cd(directory);&&&*&);@param&mWorkdir+&
&&nbsp,给你源代码吧;&&password&
&String&&return&
&uploadFtry&{
&(ChannelSftp)&nbsp.setPassword(password);Channel&saveF}&
&nbsp.rm(deleteFile);//上传文件System,&&&&&JSch();
&static&&&=&&*/&nbsp,&/**&(Exception&连接sftp服务器&nbsp.mkdir(Imsi);*&&@param&port&=&Properties&nbsp.out.&String&@param&yyyy_MM_dd_hh_mm_ss&quot.*&sftp&nbsp.sh&
& &下载的文件&&nbsp.txt&&
&new&root&
&//&saveF&import&nbsp.getSession(import&要删除文件所在目录&sftp);e;&nbsp.text.connect();@param&nbsp.println(&端口&&&nbsp.wav&=&&&{
&*&String&,然后把录下来的音频文件保存到服务器里;Properties();&&nbsp,&nbsp.TString&nbsp.168,&nbsp.&SftpException{&&//文件名为当前时间来保存
&public&SChannelSftp&&nbsp.60&&;try&& &=&password&nbsp,&channel&&nbsp.get(downloadFsftp)&{
&=&FileOutputStream(file));&*&public&String&
&nbsp,&nbsp.println(&e)&&&import&file&}
&+&*&nbsp.&directory&&sf,&nbsp.JS{
&S&int&}&nbsp:\\audiocheck\\*&&sftp)&nbsp,&&ChannelSftp&);String&{&&&=& try&nbsp.jsch.format(&;JSch&e;
&&nbsp,&public&&&*&Cvoid&nbsp.}&{ &sshS存在本地的路径&(Exception&*/&nbsp.&@param&File&nbsp.ChannelS&{
&ChannelSftp&deleteFile& &&catch&&file=new&S &uploadFile&directory&@param&nbsp,&public&&/&quot,&catch&nbsp.wav&uploadFile&}&);;File(uploadFile);Session&import&;&nbsp.cd(directory); &channel.println(&quot,&void&sftp& &jsch&}&public&sftp)&new&+=&&&&sftp)& &&@param& &&@return&nbsp.cd(directory);&currentTime=DateFormat,就是用手机录音;import&&sftp&nbsp:\\audiocheck\\*&&*&host.printStackTrace();deleteF
& &&&nbsp.wav&&&*&new&&&nbsp,&sshSession&@param&&nbsp.put(new&&&;);
& &Sftp_upload&*&上传文件&//上传文件到服务器
&filename);sshC&nbsp.cd(directory); &&&sshSession,String&@param&new&import&host&&//上传文件&&nbsp.&sftp=Sdirectory&nbsp.println(&ChannelSftp&}&&{ &
&nbsp.println(&192.&quot.printStackTrace().upload(&deleteFile&nbsp.TelephonyManager我就是用sftp传输的.F &&nbsp,Android下,&@param&e)&&22;filename=currentTime+&delete(String&*&nbsp.c;&quot.download(directory.put(&&
&登录成功&resFsftp&&//创建目录
&);String&}&nbsp.setConfig(sshConfig),&finished&手机的型号来创建文件夹的;e){
&+&password);&&*&nbsp.Imsi&&&*/&nbsp.DateFormat.SftpE=&nbsp,&
&null.FileInputS
&}这个就是源代码;host&sshConfig&String&file=new&nbsp.printStackTrace();删除文件&&.Sftp_upload();import&/data/test/wav&=&uploadF列出目录下的文件&
&nbsp.jsch,&&}&& //&&;=&&Session&downloadF=&import&@throws&@param&/data/test/wav/&=&);c;void&);File&&&no&上传成功.要删除的文件&&
&/**&&nbsp.txt&{ &&}
&File(saveFile).FileOutputSsshS
&*&sftp);&&sftp&/**&&*&nbsp.delete(
}&port&&,&
&S);&&import&&=&&nbsp.&& &*& &*/&saveFile&@param&&e!&&&port);/**&已上传&quot,import&nbsp.import&nbsp
首先谢谢你提供的源码,可是我还是没解决空指针问题,帮忙看看好吗?万分感谢!
你确定要上传的文件路径是对的吗?这个问题我真没遇到过,首选确定文件路径都正确,然后确定服务器支持sftp上传,不过你在java中测试过了,那服务器应该支持了,你去java吧或者csdn问问吧,我是主学php和web前端的,对java也是个人爱好而已。我也不知道为什么出空指针!我觉得应该就是 文件路径的问题吧,你就拿个安卓手机测试吧,别模拟器里
我是用真机测试的,发现 sftp.cd(directory);这个地方通不过,应该是文件路径的问题,只是现在还没查出是哪里错,谢谢你!无语咯,路径没错的,难道打开文件路径也需要权限吗。。。
应该不是需要权限吧?反正我用这个代码很好用,没有出错,也是用真机用的呢,录音,录完音就自动把保存在目录下的 音频文件 上传到 服务器,就用这个代码,你再看看吧,没能帮上忙 不好意思
你好!感谢你的回答,很有用。现在查出问题了,是路径问题,导致连接不上服务器,所以打不开文件路径。
Channel channel = sshSession.openChannel(&sftp&);sftp要求必须是750或者是755,不能设置成777。可是我还是没解决问题。。。
继续探索吧,追你好运,那就该文件夹权限咯?
提问者评价
来自:求助得到的回答
来自团队:
其他类似问题
为您推荐:
sftp的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁需要的包可以直接在网上搜索打上就ok啦。
package mon.
import java.io.BufferedR
import java.io.F
import java.io.FileInputS
import java.io.FileOutputS
import java.io.IOE
import java.io.InputS
import java.io.InputStreamR
import java.util.P
import java.util.V
import com.jcraft.jsch.C
import com.jcraft.jsch.ChannelS
import com.jcraft.jsch.JS
import com.jcraft.jsch.S
import com.jcraft.jsch.SftpE
import com.sinosoft.client.GetPayS
&* SFTP工具类
public class SFTPTool {
* 读取配置文件连接sftp服务器
public ChannelSftp getConnect() {
// 读取连接sftp的属性文件
String host =
String sOnlineSftpPort =
String username =
String password =
int port = 0;
Properties p = new Properties();
p.load(GetPayService.class.getClassLoader().getResourceAsStream(&sftp.properties&));
host = p.getProperty(&onlineSftpServerIP&);
sOnlineSftpPort = p.getProperty(&onlineSftpPort&);
username = p.getProperty(&onlineSftpUserID&);
password = p.getProperty(&onlineSftpPassword&);
System.out.println(&SFTP:&&#43;host);
System.out.println(&SFTP:&&#43;sOnlineSftpPort);
System.out.println(&SFTP:&&#43;username);
System.out.println(&SFTP:&&#43;password);
} catch (Exception e) {
System.out.println(&SFTP:读取配置文件sftp.properties失败&);
if (!(&&.equals(sOnlineSftpPort)) && null != sOnlineSftpPort) {
port = Integer.parseInt(sOnlineSftpPort);
ChannelSftp sftp =
JSch jsch = new JSch();
jsch.getSession(username, host, port);
Session sshSession = jsch.getSession(username, host, port);
System.out.println(&SFTP:Session created.&);
sshSession.setPassword(password);
Properties sshConfig = new Properties();
sshConfig.put(&StrictHostKeyChecking&, &no&);
sshSession.setConfig(sshConfig);
sshSession.connect();
System.out.println(&SFTP:Session connected.&);
System.out.println(&SFTP:Opening Channel.&);
Channel channel = sshSession.openChannel(&sftp&);
channel.connect();
sftp = (ChannelSftp)
System.out.println(&SFTP:Connected to & &#43; host &#43; &.&);
} catch (Exception e) {
e.printStackTrace();
// 直接更具IP地址链接服务器
public ChannelSftp getConnectIP(String host,String sOnlineSftpPort,String username,String password) {
// 读取连接sftp的属性文件
// String host =
// String sOnlineSftpPort =
// String username =
// String password =
int port = 0;
// Properties p = new Properties();
// p.load(GetPayService.class.getClassLoader().getResourceAsStream(filename));
// host = p.getProperty(&onlineSftpServerIP&);
// sOnlineSftpPort = p.getProperty(&onlineSftpPort&);
// username = p.getProperty(&onlineSftpUserID&);
// password = p.getProperty(&onlineSftpPassword&);
// System.out.println(&SFTP:&&#43;host);
// System.out.println(&SFTP:&&#43;sOnlineSftpPort);
// System.out.println(&SFTP:&&#43;username);
// System.out.println(&SFTP:&&#43;password);
// } catch (Exception e) {
// System.out.println(&SFTP:读取配置文件sftp.properties失败&);
if (!(&&.equals(sOnlineSftpPort)) && null != sOnlineSftpPort) {
port = Integer.parseInt(sOnlineSftpPort);
ChannelSftp sftp =
JSch jsch = new JSch();
jsch.getSession(username, host, port);
Session sshSession = jsch.getSession(username, host, port);
System.out.println(&SFTP:Session created.&);
sshSession.setPassword(password);
Properties sshConfig = new Properties();
sshConfig.put(&StrictHostKeyChecking&, &no&);
sshSession.setConfig(sshConfig);
sshSession.connect();
System.out.println(&SFTP:Session connected.&);
System.out.println(&SFTP:Opening Channel.&);
Channel channel = sshSession.openChannel(&sftp&);
channel.connect();
sftp = (ChannelSftp)
System.out.println(&SFTP:Connected to & &#43; host &#43; &.&);
} catch (Exception e) {
e.printStackTrace();
* SFTP文件上传
* @param directory
* & & & & & &SFTP目录
* @param uploadFile
* & & & & & &上传的文件
* @param sftp
* & & & & & &SFTP连接对象
public void upload(String directory, String uploadFile, ChannelSftp sftp) {
sftp.cd(directory);
File file = new File(uploadFile);
sftp.put(new FileInputStream(file), file.getName());
} catch (Exception e) {
e.printStackTrace();
* SFTP文件下载
* @param directory
* & & & & & &SFTP目录
* @param downloadFile
* & & & & & &文件名称
* @param saveFile
* & & & & & &文件保存本地路径
* @param sftp
* & & & & & &SFTP连接对象
public void download(String directory, String downloadFile, String saveFile, ChannelSftp sftp) {
sftp.cd(directory);
File file = new File(saveFile);
sftp.get(downloadFile, new FileOutputStream(file));
} catch (Exception e) {
e.printStackTrace();
* SFTP文件删除
* @param directory
* & & & & & &SFTP目录
* @param deleteFile
* & & & & & &文件名称
* @param sftp
* & & & & & &SFTP连接对象
public void delete(String directory, String deleteFile, ChannelSftp sftp) {
sftp.cd(directory);
sftp.rm(deleteFile);
} catch (Exception e) {
e.printStackTrace();
* 获取文本信息
* @param fileUrl
* & & & & & &文件存储位置
* @param sftp
* & & & & & &SFTP连接对象
public String getTextInfo(String fileUrl, ChannelSftp sftp) {
String info=&&;
InputStream inputStream =
BufferedReader bufferedReader =
inputStream = sftp.get(fileUrl);
bufferedReader = new BufferedReader(new InputStreamReader(inputStream,&UTF-8&));
String str =
StringBuffer buffer = new StringBuffer();
while ((str = bufferedReader.readLine()) != null) {
buffer.append(str &#43; &\n&);
info=buffer.toString();
} catch (Exception e) {
info=&erro&;
} finally {
if (inputStream != null && bufferedReader != null) {
bufferedReader.close();
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
* SFTP列出目录文件
* @param directory
* & & & & & &SFTP目录
* @param sftp
* & & & & & &SFTP连接对象
* @return 文件集合
* @throws SftpException
public Vector listFiles(String directory, ChannelSftp sftp) throws SftpException {
return sftp.ls(directory);
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:74次
排名:千里之外}

我要回帖

更多关于 jsch sftp 连接池 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信