精华内容
下载资源
问答
  • 使用SFTP上传下载文件的时候,调用channelSftp.ls(path)方法, 这个path可以是绝对路径,也可以是相对路径。 如果要使用绝对路径,前边一定要有"/"; 如果要使用相对路径,前边一定不要有"/"; 比如:我设置我的...

    使用SFTP上传下载文件的时候,调用channelSftp.ls(path)方法,

    这个path可以是绝对路径,也可以是相对路径。

    如果要使用绝对路径,前边一定要有"/";

    如果要使用相对路径,前边一定不要有"/";

    比如:我设置我的SFTP根目录是【/home/TestFTPfolder】,他下边有一个【file】目录,我想知道这个【file】文件里有哪些文件,

    所以调用channelSftp.ls时,可以是channelSftp.ls("file"),也可以是channelSftp.ls("/home/TestFTPfolder/file"),这样就可以展示【file】目录下有哪些文件了。

     

    记录一下,好坑。。。

    展开全文
  • at com.jcraft.jsch.ChannelSftp.throwStatusError(ChannelSftp.java:2873) at com.jcraft.jsch.ChannelSftp.checkStatus(ChannelSftp.java:2486) at com.jcraft.jsch.ChannelSftp._put(ChannelSftp.java:686) ...

    错误描述

    系统通过sftp上传文件,一直运行情况良好,突然抛出连接已经关闭异常。

    错误日志

    4: Failure
            at com.jcraft.jsch.ChannelSftp.throwStatusError(ChannelSftp.java:2873)
            at com.jcraft.jsch.ChannelSftp.checkStatus(ChannelSftp.java:2486)
            at com.jcraft.jsch.ChannelSftp._put(ChannelSftp.java:686)
            at com.jcraft.jsch.ChannelSftp.put(ChannelSftp.java:540)
            at com.jcraft.jsch.ChannelSftp.put(ChannelSftp.java:492)
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
            at java.lang.reflect.Method.invoke(Method.java:498)
            at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)
            at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:133)
            at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:97)
            at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827)
            at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738)
            at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
            at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967)
            at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901)
            at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
            at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
            at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
            at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
            at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:81)
            at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
            at com.klzan.mobile.controller.CorsConfig.doFilter(CorsConfig.java:43)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
            at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)
            at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
            at org.apache.logging.log4j.web.Log4jServletFilter.doFilter(Log4jServletFilter.java:71)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
            at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
            at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:94)
            at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504)
            at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
            at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
            at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620)
            at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
            at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:502)
            at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1132)
            at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:684)
            at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1539)
            at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1495)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
            at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
            at java.lang.Thread.run(Thread.java:748)
    

    解决方案

    该问题是由于硬盘空间已经满导致的,解决办法是清理磁盘空间,将日志、临时文件等一些删除或者扩容。

    查看当前目录磁盘占用情况:df -h
    查看当前目录文件磁盘占用情况:du -sh *

    参考链接:
    https://sourceforge.net/p/jsch/discussion/219650/thread/44de1f25/
    https://issues.jenkins-ci.org/browse/JENKINS-49582?focusedCommentId=332288&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-332288
    http://blog.sina.com.cn/s/blog_c0a9dbd20102wh56.html

    展开全文
  • channelsftp.mkdir()报错 no such file

    千次阅读 2021-01-14 15:43:17
    liunx系统利用sftp上传文件到文件服务器时候 ChannelSftp.mkdir()创建文件夹报错:no such file 报错路径: “/opt/www.bmw.com/file/” liunx在最前面加‘.’ 解决路径"./opt/www.bmw.com/file/"

    liunx系统利用sftp上传文件到文件服务器时候 ChannelSftp.mkdir()创建文件夹报错:no such file
    报错路径: “/opt/www.bmw.com/file/”
    解决: mkdir不能多级创建 只能一个一个文件夹判断

    展开全文
  • 在一次项目开发中使用com.jcraft.jsch.ChannelSftp.ls(String path)方法判断文件是否存在,一开始项目正常运行,但是运行一段时间后ls()性能特别缓慢, 由此引发了对ls方法的研究。 问题定位 经过问题排查后,发现ls...

    背景说明

    我们在项目开发中,经常会使用sftp链接方式对远程文件进行下载。一般是先判断远程服务器上是否有该文件,若有,则下载;若没有,则不做处理。

    在一次项目开发中使用com.jcraft.jsch.ChannelSftp.ls(String path)方法判断文件是否存在,一开始项目正常运行,但是运行一段时间后ls()性能特别缓慢, 由此引发了对ls方法的研究。

    问题定位

    经过问题排查后,发现ls()方法调用一次花费了40秒,之前每次都是零点几秒的。再次深入排查,发现随着时间增加,该目录下的文件会越来越多,但是文件也才一千多个,总占用空间400M,这点容量不应该这么慢才对。继续排查发现远程服务器是window系统,多次测试后发现ls方法在window系统下随着文件增多性能特别慢。

    问题代码

    这是之前性能缓慢的代码,若ls(String path)下面有文件,会返回内容,若没有该文件,会抛出异常,所以需要用try…catch捕获异常。

     /**
        * 判断目录下是否存在指定文件
        * @param directory
        * @param fileName
        * @param sftp
        * @return
        */
        public boolean sftpFilesExist(String directory, String fileName,ChannelSftp sftp){  
            boolean result = true;
            try {
    			 sftp.cd(directory);
    			 sftp.ls(fileName);   //底层还是先ls目录下的文件,然后一个个去找的,效率受文件数量和文件大小影响 linux影响不太明显,window下差别会挺大,所以不要用ls方法
    		} catch (Exception e) {
    			logger.info("sftp {}目录下不存在该文件{}",directory,fileName+e.getMessage());
    			logout();//关闭sftp链接方法
    			result = false;
    		}
    		return result;
        } 
    

    ChannelSftp.ls(String path)方法说明:

    • ls(String path) 底层会先ls出该目录下的所有文件,然后一个一个去找,效率受文件数量和文件大小影响,linux影响不太明显,window下差别会挺大

    ls()与stat()对比

    • ChannelSftp.ls(String path):
      循环匹配目录下的所有文件,直到找到目标文件后返回文件信息。
    • ChannelSftp.stat(String path):
      直接定位到文件所在位置。若文件存在,返回文件信息。例-rwxrwxrwx 0 0 182000000 Wed Sep 23 14:44:49 CST 2020。

    说明
    Ls与stat底层查找文件的方法相同,都是调用SftpATTRS getATTR(Buffer buf)方法返回文件信息。不同的是由于ls()方法是循环扫描目录下的所有文件,直到找到文件为止,
    所以ls()比stat()花费时间更长,ls()受文件总数的影响。另文件的大小会占用空间大小,导致ls()运行缓慢,所以ls()也受文件大小影响。

    Ls()与stat()在window系统与linux系统下效率的对比:(下列数据均为平均值)

    系统数据类型Ls方法耗时(秒)stat方法耗时(秒)
    Windows1200个文件, 总量402M410.3
    Windows2400个空文件860.3
    Windows2400个文件,总量824M1280.3
    Linux1200个文件,总量16G60.27

    数据对比结论

    1. ls方法在windows系统下效率低下,并且受文件大小和文件数量的影响。

    2. Ls方法在linux下效率较高,虽然也受文件大小和文件数量的影响,但是耗时相对较少。

    3. Stat方法在windows与linux上效率比较稳定,且耗时少。

    修改后代码

    下面为修改后代码,无论window下还是linux下,stat()方法的效率都会比ls()方法效率高。

    /**
        * 判断目录下是否存在指定文件
        * @param directory
        * @param fileName
        * @param sftp
        * @return
        */
        public boolean sftpFilesExist(String directory, String fileName,ChannelSftp sftp){  
            boolean result = true;
            try {
    			 sftp.cd(directory);
    //			 sftp.ls(fileName);   底层还是先ls目录下的文件,然后一个个去找的,效率受文件数量和文件大小影响 linux影响不太明显,window下差别会挺大
                sftp.stat(fileName); //返回文件信息  -rwxrwxrwx 0 0 182000000 Wed Sep 23 14:44:49 CST 2020
    		} catch (Exception e) {
    			logger.info("sftp {}目录下不存在该文件{}",directory,fileName+e.getMessage());
    			logout();//关闭sftp链接方法
    			retult = false;
    		}
    		return result;
        } 
    
    展开全文
  • ChannelSftp类是JSch实现SFTP核心类,它包含了所有SFTP的方法,如: put(): 文件上传 get(): 文件下载 cd(): 进入指定目录 ls(): 得到指定目录下的文件列表 rename(): 重命名指定文件或目录 rm...
  • ChannelSftp.ls(String directory)方法,使用中会报异常: at com.jcraft.jsch.ChannelSftp.ls(ChannelSftp.java:1720) at com.jcraft.jsch.ChannelSftp.ls(ChannelSftp.java:1526) Caused by: java.io....
  • ChannelSftp 远程下载和远程上传

    万次阅读 2019-06-21 11:27:54
    private static void closeResource(Channel channel, ChannelSftp sftp, Session session) { if (channel != null) { if (channel.isConnected()) { channel.disconnect(); } } if (sftp != null) { if ...
  • ChannelSftp下载目录下所有或指定文件、ChannelSftp获取某目录下所有文件名称、InputStream转File /** * ChannelSftp下载目录下所有或指定文件 * ChannelSftp获取某目录下所有文件名称 * InputStream转File ...
  • sftp的用法:ChannelSftp

    千次阅读 2019-12-16 11:56:52
    if(sftp.ls(directory) == null){ sftp.mkdir(directory); } //切换到指定文件夹 sftp.cd(directory); }catch (SftpException e){ //创建不存在的文件夹,并切换到文件夹 sftp.mkdir(directory); sftp.cd...
  • 项目里有一功能,要从FTP上上传或者下载文件,使用的是ChannelSftp来完成任务,jar包为com.jcraft.jsch_0.1.31.jar,一直运行稳定,直到有一天下载一个中文名称的文件却发现文件大小为0KB。 问题分析 尝试把文件...
  • Vector vv = sftp.ls(pathName); if (vv == null && vv.size == 0 ){ return null ; } else { for (Object object : vv){ ChannelSftp.LsEntry entry=(ChannelSftp.LsEntry)object; String filename=...
  • Java ChannelSftp实现文件上传下载 宗旨 本文介绍ChannelSftp通过SFTP协议,进行文件的上传下载等功能,旨在提升自身能力。同时,对阅读本文的小伙伴提供一定帮助,有错误的地方欢迎指出。如有转载,请标明原文地址...
  • String filename = ((ChannelSftp.LsEntry) channelSftp.ls(srcFilePath).get(0)).getFilename(); Path dstPath = new Path(hdfsPath, filename); uploader.uploadStreamToHdfs(inputStream, dstPath, true); } ...
  • Vector lss = sftp.ls("*"); for (int i = 0; i < lss.size(); i++) { Object obj = lss.elementAt(i); if (obj instanceof com.jcraft.jsch.ChannelSftp.LsEntry) { LsEntry entry = (LsEntry) obj; if (true && !...
  • 使用ChannelSftp上传文件,并展示进度前端页面工具类 FTPUtils自定义定时监听器**FileProgressMonitor **进程单例类**ScheduleSingLeTon**Controller 前端页面 点击上传按钮后,异步递归获取文件上传进度 <!...
  • SFTP文件下载、上传

    千次阅读 2015-03-31 18:00:59
    return sftp.ls(directory); } } 读取配置文件工具类 public class BackendUtils { /** * @MethodName : GetConfigProperty * @Description : 去读配置文件中的property属性 * @param...
  • sftp文件传输

    2018-11-18 21:15:59
    client.ls(remoteDir, selector); LOGGER.info("增量文件数量:" + rptFiles.size()); return rptFiles; } catch (SftpException e) { LOGGER.error("获取文件列表异常:", e); } catch ...
  • SFTP 报错 pipe closed

    万次阅读 2017-04-12 16:31:50
    原因是代码中执行顺序错误,应该是先链接上SFTP 再创建ChannelSFTP。 错误代码: ChannelSftp cs = para.sftp; if (!para.isConnected) connectSFTP(para, para.conFTPTryCount); 正确的代码 应该...
  • SFTP ChannelSftp 方式文件下载

    千次阅读 2017-12-14 14:20:06
    public static ChannelSftp connect(String username,String password,String hostname,String remoteDir,int port){  //remoteDir远程目录 文件下载的目录  ChannelSftp sftp =null;  Session sshSess
  • } Vector vector = channelSftp.ls(fileDir); for (int i = 0; i < vector.size(); ++i) { ChannelSftp.LsEntry entry = (ChannelSftp.LsEntry) vector.get(i); if (fileName.equals(entry.getFilename())) { ...
  • sftp命令详解

    千次阅读 2012-04-10 10:39:58
    lls [ls-options [path]] Display local directory listing lmkdir path Create local directory ln oldpath newpath Symlink remote file lpwd Print local working directory ls [-1aflnrSt] [path] ...
  • ChannelSftp.LsEntrySelector selector = new ChannelSftp.LsEntrySelector() { @Override public int select(ChannelSftp.LsEntry entry) { String filename = entry.getFilename(); if(entry.getAttrs()....
  • Vector vector = channelSftp.ls( "/" ); try { for (Object obj :vector){ if (obj instanceof com.jcraft.jsch.ChannelSftp.LsEntry){ String fileName = ((com.jcraft.jsch.ChannelSftp.LsEntry)...
  • Vector list = sftp.ls("*.csv"); for (ChannelSftp.LsEntry entry : list) { System.out.println(entry.getFilename()); } } catch (Exception e) { log.error("sftp连接失败:", e); } finally { //关闭session if...
  • 连接获取上传sftp远程目录信息的工具类 ...import com.jcraft.jsch.ChannelSftp; import com.jcraft.jsch.JSch; import com.jcraft.jsch.Session; import org.slf4j.Logger; import org.slf4j.Logger...
  • import com.jcraft.jsch.ChannelSftp; 16 import com.jcraft.jsch.JSch; 17 import com.jcraft.jsch.JSchException; 18 import com.jcraft.jsch.Session; 19 import com.jcraft.jsch.SftpException;...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 828
精华内容 331
关键字:

channelsftp.ls