精华内容
下载资源
问答
  • 目前开发某个功能需求时,需要校验sftp文件是否存在,而不需读取其内容。 公司现有sftp功能代码都为获取文件数据并落库或其他处理。 而我这个功能只需要校验是否存在,不想使用现有方式拉取判断是否存在,拉取文件...

    一、问题背景

    目前开发某个功能需求时,需要校验sftp中文件是否存在,而不需读取其内容。
    公司现有sftp功能代码都为获取文件数据并落库或其他处理。
    而我这个功能只需要校验是否存在,不想使用现有方式拉取判断是否存在,拉取文件必然会有成本。

    二、解决思路

    stackover回答:使用 JSch,有没有办法判断远程文件是否存在,而无需执行ls并循环遍历文件以查找名称匹配?

    • ls:查看目录下文件信息
    • stat:stat方法确实遵循符号链接(即返回链接的属性而不是目标)
    • lstat:lstat方法不遵循符号链接(即返回目标的属性而不是链接)
      例如,您有一个符号链接’myhome’,它实际上是/ u02/home/alamba的快捷方式。
      使用lstat,您将获得链接目标的属性’/ u02/home/alamba’文件夹。使用统计信息,您将获得“myhome”链接的属性。

    还是不太清楚stat和lstat的区别。网上只找到了以上信息。
    不过大致思路就是通过获取文件信息判断是否存在,获取失败都是抛出异常,自行处理即可。

    三、最终解决

    1. 连接sftp获取对象。调用其lstat方法传入文件全路径。
    2. 抛出异常说明获取不到,正常返回文件信息。
    3. 其他方式,只需将sftp.lstat换为.stat或.ls即可。
        public boolean isExistSftp(String filePach){
            boolean result = false;
            Session session = null;
            Channel channel = null;
            ChannelSftp sftp = null;
            try {
                JSch jsch = new JSch();
                session = jsch.getSession(apolo.getSftpUserName(),apolo.getSftpIp(), apolo.getSftpPort());
                session.setPassword(apolo.getSftpPassWord());
                session.setTimeout(60000);
                Properties config = new Properties();
                config.put("StrictHostKeyChecking", "no");
                session.setConfig(config);
                session.connect();
    
                channel = session.openChannel("sftp");
                channel.connect();
                sftp = (ChannelSftp) channel;
                SftpATTRS lstat = sftp.lstat(filePach);
                result = true;
            } catch (JSchException e) {
                log.error("连接SFTP失败,IP:{},端口:{},用户名:{},密码:{}",
                        apolo.getSftpIp(),apolo.getSftpPort(),apolo.getSftpUserName(),apolo.getSftpPassWord().substring(0,3),e);
            } catch (SftpException e) {
                log.error("sftp文件下载失败,找不到对应文件",e);
            } catch (Exception e){
                log.error("Sftp连接获取文件信息出现未知异常",e);
            }finally {
                if (sftp != null)sftp.quit();
                if (channel != null)channel.disconnect();
                if (session != null)session.disconnect();
            }
            return result;
        }
    

    四、遗留问题

    该方法为接口调用,请求量较大时,与sftp频繁建立连接势必会造成性能、通讯损耗。

    甲方封装代码

    在这里插入图片描述
    个人浅显理解:

    1. bean为单例,整个jvm只有一个对象共用。
    2. 按照目前的写法,系统启动或使用时初始化建立与ftp的链接。每次使用时只调用其下载或上传等方法,不能调用关闭。
    3. 但目前了解到功能开发为方法内注入该bean,先调用connect创建链接,之后下载,最后close关闭。
    4. 多线程环境下,很大可能会造成A线程关闭了B新建的链接会话。相当于俩线程同时操作bean内的成员变量。

    五、附ftp连接

    该部分引入:https://www.ktanx.com/blog/p/4028

    减少依赖,使用JDK自带的ftp客户端sun.net.ftp.FtpClient

    FtpClient ftpClient = new FtpClient();
    ftpClient.openServer(FTP_IP, FTP_PORT);
    ftpClient.login(LOGIN_NAME, PASSWORD);
    ftpClient.binary();
    TelnetInputStream is = ftpClient.get("/ftp/re/20140713.dat");
    BufferedReader reader = new BufferedReader(new InputStreamReader(is));
    

    apache的commons-net

    FtpClient ftpClient = new FtpClient();
    ftpClient.connect(FTP_IP, FTP_PORT);
    ftpClient.login(LOGIN_NAME, PASSWORD);
    // 中文支持
    ftpClient.setControlEncoding("UTF-8");   
    ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);  
    ftpClient.enterLocalPassiveMode();  
      InputStream is = ftpClient.retrieveFileStream("/ftp/re/20140713.dat");
    BufferedReader reader = new BufferedReader(new InputStreamReader(is));
    

    sftp

    ChannelSftp sftp = null;
    JSch jsch = new JSch();
    Session sshSession = jsch.getSession(LOGIN_NAME, FTP_IP, FTP_PORT);
    sshSession.setPassword(PASSWORD);
    sshSession.setConfig("StrictHostKeyChecking", "no");
    sshSession.connect();
    Channel channel = sshSession.openChannel("sftp");
    channel.connect();
    sftp = (ChannelSftp) channel;
    InputStream is = sftp.get("/ftp/re/20140713.dat");
    BufferedReader reader = new BufferedReader(new InputStreamReader(is));
    
    展开全文
  • java sftp判断目录是否存在

    千次阅读 2019-06-02 15:01:00
    java sftp判断目录是否存在 public boolean isExistDir(String path,ChannelSftp sftp){ boolean isExist=false; try { SftpATTRS sftpATTRS = sftp.lstat(path); isExist ...

    java sftp判断目录是否存在

    public boolean isExistDir(String path,ChannelSftp sftp){
            boolean  isExist=false;
            try {
                SftpATTRS sftpATTRS = sftp.lstat(path);
                isExist = true;
                return sftpATTRS.isDir();
            } catch (Exception e) {
                if (e.getMessage().toLowerCase().equals("no such file")) {
                    isExist = false;
                }
            }
            return isExist;
    
        }

    完整sftpUtil.class

    package com.iot.crm.common.util;
    
    import com.jcraft.jsch.*;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    import java.io.*;
    import java.util.Properties;
    
    
    public class SftpUtils {
        
        final Logger logger = LoggerFactory.getLogger(SftpUtils.class);
    
        protected String host;
        protected int port;
        protected String username;
        protected String password;
        Session sshSession = null ;
    
        /**
         * @param host ip
         * @param port 端口
         * @param username 账号
         * @param password 密码
         */
        public SftpUtils(String host, int port, String username, String password) {
            set(host, port, username, password);
        }
    
        public void set(String host, int port, String username, String password) {
            this.host = host;
            this.port = port;
            this.username = username;
            this.password = password;
        }
    
        public Session getSession() {
            //Session sshSession = null;
            try {
                JSch jsch = new JSch();
                jsch.getSession(this.username, this.host, this.port);
                sshSession = jsch.getSession(this.username, this.host, this.port);
                System.out.println("Session created.");
                sshSession.setPassword(this.password);
                Properties sshConfig = new Properties();
                sshConfig.put("StrictHostKeyChecking", "no");
                sshSession.setConfig(sshConfig);
                sshSession.connect();
                System.out.println("Session connected.");
                System.out.println("Opening Channel.");
            } catch (Exception e) {
                e.printStackTrace();
            }
            return sshSession;
        }
        /**
        /**
         * 链接linux
         */
        public ChannelSftp connectSftp() {
            getSession();
            ChannelSftp sftp = null;
            try {
                System.out.println("Session connected.");
                System.out.println("Opening Channel.");
                Channel channel = sshSession.openChannel("sftp");
                channel.connect();
                sftp = (ChannelSftp) channel;
            } catch (Exception e) {
                e.printStackTrace();
                sftp = null;
            }
            return sftp;
        }
    
        public void exec(Session session,String command) {
            ChannelExec channelExec = null;
            try {
                System.out.println("Session connected.");
                System.out.println("Opening Channel.");
                Channel channel = session.openChannel("exec");
                channelExec = (ChannelExec) channel;
                channelExec.setCommand(command);
                channelExec.connect();
                channelExec.setInputStream(null);
                InputStream in = channelExec.getInputStream();
                BufferedReader reader = new BufferedReader(new InputStreamReader(in));
                String buf = null;
                while ((buf = reader.readLine()) != null)
                {
                    System.out.println(buf);
                }
                reader.close();
            } catch (Exception e) {
                e.printStackTrace();
                channelExec = null;
            }finally {
                channelExec.disconnect();
            }
        }
    
    
    
        /**
         * linux上传文件
         */
        public void upload(String directory, File file) {
            ChannelSftp sftp = connectSftp();
            try {
                if (null != sftp) {
                    sftp.cd(directory);
                    logger.info("cd {}", directory);
                    FileInputStream stream = new FileInputStream(file);
                    try {
                        sftp.put(stream, file.getName());
                    } catch (Exception e) {
                        logger.error("upload error", e);
                    } finally {
                        stream.close();
                    }
                }
            } catch (Exception e) {
                logger.error("upload:" + host, e);
            } finally {
                if (sftp != null) {
                    sftp.disconnect();
                    sftp.exit();
                }
                sshSession.disconnect();
            }
        }
    
        /**
         * linux下载文件
         */
        public void get(String remotePath,String remoteFilename,String localFileName) {
            ChannelSftp sftp = connectSftp();
            File file=null;
            OutputStream output=null;
            try {
                if (null != sftp) {
                     file = new File(localFileName);
                    if (file.exists()){
                        file.delete();
                    }
                    file.createNewFile();
                    sftp.cd(remotePath);
    
                    output=new FileOutputStream(file);
                    try {
                        logger.info("Start download file:{},the arm file name:{}",remotePath+remoteFilename,localFileName);
                        sftp.get(remoteFilename, output);
                        logger.info("down {} suc", remotePath+remoteFilename);
                    } catch (Exception e) {
                        logger.error("download error", e);
                    } finally {
                        output.close();
                    }
                }
            } catch (Exception e) {
                logger.error("down error :" , e);
            } finally {
                close(sftp);
            }
        }
    
        protected void close(ChannelSftp sftp) {
            if (sftp != null) {
                sftp.disconnect();
                sftp.exit();
            }
            if (sshSession != null) {
                sshSession.disconnect();
            }
        }
    
       
    
    }

     

    转载于:https://www.cnblogs.com/pu20065226/p/10962997.html

    展开全文
  • jsch:通过文件名,判断sftp 指定路径中文件是否存在

    jsch:通过文件名,判断sftp 指定路径中文件是否存在

    通过ChannelSftp 提供的扩展,实现匹配功能

    展开全文
  • linux判断远程服务器文件是否存在 内容精选换一换仅在部分局点Region公测使用。该功能仅支持v1.15及以上版本集群。CCE Turbo集群自定义镜像方法请参见制作CCE节点自定义镜像。镜像需打上专有标签,标签键值均为cce。...

    linux判断远程服务器文件是否存在 内容精选

    换一换

    c8a5a5028d2cabfeeee0907ef5119e7e.png

    仅在部分局点Region公测使用。该功能仅支持v1.15及以上版本集群。CCE Turbo集群自定义镜像方法请参见制作CCE节点自定义镜像。镜像需打上专有标签,标签键值均为cce。镜像操作系统版本要求:euleros 2.5、centos 7.6。制作镜像的过程中必须按照操作指南进行制作,防止一些不可预期问题出现。根据基础镜像创建出来的虚

    在Linux操作系统云服务器中创建文件时提示空间不足:No space left on device磁盘分区block空间使用率达到100%。磁盘分区inode空间使用率达到100%。已删除文件因句柄被占用未释放导致相应空间未释放。fs.inotify.max_user_watches值耗尽执行以下命令查看磁盘空间。df -h如回显信息如

    linux判断远程服务器文件是否存在 相关内容

    以Linux操作系统为例,如果在变更规格后执行ifconfig命令发现云服务器原来是eth0、eth1的网卡设备没有了,变成了eth2、eth3,说明云服务器变更规格后发生了网卡漂移。出现网卡漂移的现象,是由于创建云服务器使用的镜像的操作系统中打开了网卡保留规则,才导致该云服务器变更规格后出现网卡漂移。Winsows操作系统云服务器出现网

    使用弹性云服务器或者外部镜像文件创建私有镜像时,必须确保操作系统中已安装PV driver,使新发放的云服务器支持XEN虚拟化,同时也可以提升云服务器的I/O处理性能、实现对云服务器硬件的监控和其他高级功能。如果不安装PV driver,云服务器的网络性能很差,并且安全组和防火墙也不会生效。因此,请您务必安装。使用公共镜像创建的云服务器默

    linux判断远程服务器文件是否存在 更多内容

    91fba63c5e17e5f0e99d0f8174c4b31b.png

    安装传输工具在本地主机和Windows云服务器上分别安装数据传输工具,将文件上传到云服务器。例如QQ.exe。在本地主机和Windows云服务器上分别安装数据传输工具,将文件上传到云服务器。例如QQ.exe。本地磁盘映射(推荐使用)使用远程桌面连接MSTSC方式进行数据传输。该方式不支持断点续传,可能存在传输中断的情况,因此不建议上传大文

    f37b9b09b23d9b59f1b2d6c6affcfacc.png

    确认是否已安装VNC服务器。执行以下命令:rpm -qa | grep tigervnc-server回显如下信息:tigervnc-server-1.1.0-5.e16.x86_64如果没有安装,则不回显信息或显示没有安装,需要将软件安装到宿主机中。执行2。如果已安装,执行3。rpm -qa | grep tigervnc-server

    b80c406dd1bff1336ad2b20072f4b1ca.png

    本节操作介绍在Windows和Linux环境中使用SSH密钥对方式登录Linux裸金属服务器的操作步骤。裸金属服务器状态必须为“运行中”。已获取创建该裸金属服务器时使用的密钥对私钥文件。裸金属服务器已绑定弹性公网IP,绑定方式请参见绑定弹性公网IP至服务器。已配置安全组入方向的访问规则,配置方式请参见添加安全组规则。使用的登录工具(如Pu

    b7d83a2380c86c6f5139c7b0f3df6b7a.png

    使用弹性云服务器或者外部镜像文件创建私有镜像时,必须确保操作系统中已安装UVP VMTools,使新发放的云服务器支持KVM虚拟化,同时也可以提升云服务器的网络性能。如果不安装UVP VMTools,云服务器的网卡可能无法检测到,无法与外部通信。因此,请您务必安装。使用公共镜像创建的云服务器默认已安装UVP VMTools,您可以通过以下

    a0c42bb47a44c6ed1cd778f97e224009.png

    登录Windows弹性云服务器如图1所示。(可选)使用密钥文件解析密码。对于密钥方式鉴权的弹性云服务器,需先通过管理控制台提供的获取密码功能,将创建弹性云服务器时使用的密钥文件解析为密码。具体操作,请参见获取Windows弹性云服务器的密码。对于密钥方式鉴权的弹性云服务器,需先通过管理控制台提供的获取密码功能,将创建弹性云服务器时使用的密

    784b2dc537fb8677eac9c3453eafe288.png

    Linux操作系统XEN实例变更为KVM实例前,必须已完成必要的驱动安装和配置。当您需要变更的Linux操作系统的XEN实例比较多时候,推荐您使用本节的批量自动配置的方法安装驱动,通过自动化脚本的方式批量为Linux云服务器安装驱动、配置磁盘自动挂载。在驱动安装完成后使用控制台提供的“变更规格”功能将XEN实例变更为KVM实例。XEN实例

    8eb70d4a37fe864f82daefa0aeaaa61c.png

    如果请求因错误导致未被处理,则会返回一条错误响应。错误响应中包括错误码和具体错误描述。表1列出了错误响应中的常见错误码。

    0a0ca88b94963916c79cc35f28e2f501.png

    本指南以创建的密钥对登录Linux弹性云服务器为例,指导您快速上手密钥对管理服务。包括准备环境、创建密钥对、绑定密钥对、使用私钥登录Linux弹性云服务器等操作。

    4a3dbebf52c74fe713408ff26033c570.png

    检查软件源代码是否包含Makefile文件。当软件源代码不包含Makefile文件时,用户可利用自动编译工具,例如Autoconf、Automake和Build工具构建Makefile文件。解压源代码后,进入代码目录检查代码结构,查看是否存在configure脚本,再执行configure命令:如果不存在configure脚本,可通过源码

    c2f51807c80a3c0a9fb1f931f2bad396.png

    本章节介绍如何使用弹性云服务器管理控制台上提供的远程登录(VNC方式)和如何使用密钥或密码方式(SSH方式)登录MRS集群中的节点,远程登录主要用于紧急运维场景,远程登录弹性云服务器进行相关维护操作。其他场景下,建议用户采用SSH方式登录。如果需要使用SSH方式登录集群节点,需要在集群的安全组规则中手动添加入方向规则:其中源地址为“客户端

    118fcc6f8f8a59b8317188ff10d93c94.png

    您可以根据需要选择登录裸金属服务器的登录方式或帐户类型,如果需要特殊配置,可执行以下操作:如果要禁用密码远程登录,仅支持证书登录的方式,以提高裸金属服务器的安全性,可设置如下参数:查看文件“/etc/cloud/cloud.cfg”中是否存在参数“ssh_pwauth”且值是否为“false”,若不是则修改或添加该参数且值为“false”

    展开全文
  • java sftp上传文件夹时判断子目录是否存在,百度查全是获取父文件夹下的所有文件名,去匹配存在。这样速度慢, 用sftp.stat(path)方法,API这也介绍这个方法Retrieves the file attributes of a file or ...
  • 上传sftp,创建20171024目录,判断目录是否存在,复制文件,判断文件字符集public class UpLoadFile { private static final String GBK = “GBk”; public static void main(String[] args) { String sPath = “D...
  • package sftp;import java.text.DateFormat;import java.text.SimpleDateFormat;import java.util.Date;import java.util.Vector;import com.jcraft.jsch.Channel;import com.jcraft.jsch.ChannelSftp;import ...
  • 在场景是:我想从SFTP服务器获取基于日期的最新文件,然后检查该文件是否有特定的字符串。如果是,则返回true,否则返回false。以下是我的解决方案:def does_file_exists_on_sftp_server_and_contains_given_...
  • ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) try: ssh.connect(hostname=host, port=port, username=username, password=password) sftp = ssh.open_sftp() # sftp.chdir("/tmp/") try: print(sftp....
  • 1、判断文件是否存在,不存在创建文件 [java]view plaincopyprint? Filefile=newFile("C:\\Users\\QPING\\Desktop\\JavaScript\\2.htm"); if(!file.exists()) { try{ f...
  • C#判断文件是否存在并创建和删除文件夹folder,仅仅实现这个简单功能。新手可以学习学习,老鸟飘过吧
  • JAVA FTP 连接 及判断文件是否存在

    万次阅读 2017-08-25 17:13:19
    JAVA FTP 连接 及判断文件是否存在
  • java判断远程服务器上文件是否存在 内容精选换一换已成功登录Java性能分析。待安装Guardian的服务器已开启sshd。待安装Guardian的服务器已安装JRE,JRE版本要求为Huawei JDK 8或者Open JDK 8/11。Java性能分析优先...
  • HttpURLConnection urlcon = (HttpURLConnection) url.openConnection(); String message = urlcon.getHeaderField... 如果文件存在: HTTP/1.1 200 OK 200 OK 如果文件不存在: HTTP/1.1 404 Not Found 404 Not Found
  • I would like to copy a file to the remote directory using Jsch library and SFTP protocol.If the directory on the remote host does not exist, then create it.In the API doc, ...
  • shell 判断远程文件是否存在

    千次阅读 2019-10-10 14:46:14
    1、判断本地文件是否存在: #! bin/sh if [ -f /data/test.data ]; then echo "file found..." else echo "no such file!" fi 2、判断远程文件是否存在: #! bin/sh TEST="10.62.81.96" for ip in $TEST ...
  • /bin/bash#日期初始化 T-1天#dt=$(date -d '-1 day' '+%Y%m%d')#拼接数据文件ftp服务器上的地址dt=$1sys=$2file_name=$3file_name_tail=".txt.gz"ftp_url="/src/$dt/$sys/"#shell脚本存放路径...
  • java判断远程服务器上的文件是否存在的方法,需要的朋友可以参考一下
  • 代码: lftp -u user,pwd sftp://ip lcd path cd path put file ...就判断不了是否传送成功了,上网查了很多信息,...而且我的服务器上可能会存在file,所以也不能用查看服务器上是否有这个file来判断 求大神帮帮忙
  • 前一篇文章写了windows中利用freeSSHd搭建本地sftp服务器 ...这里再写一下利用php实现从sftp上下载和上传文件 sftp类 <?php class sftpData{ private $config; private $connect = NULL; private $re...
  • 所以如果要检查远程的文件是否存在只能用其它的方法了。 如果所服务器中php的配置开启了“allow_url_fopen = On”,即允许远端访问,那么也很简单,其实这个是php.ini中默认开启的, 用fopen函数判断就行了,能...
  • * 判断文件是否存在(工具类) */ public class FileUtils { public static final String SFTP_PROTOCAL = "sftp"; /** * 创建SFTP服务器连接session * * @param jsch 需要用到jsch-0.1.54.jar包 * @para.
  • SFTP上传文件详解

    万次阅读 2016-06-21 09:27:51
    JSch是Java Secure Channel的缩写。JSch是一个SSH2的纯Java实现。它允许你连接到一个SSH服务器,并且可以使用端口转发,X11转发... SFTP是Secure File Transfer Protocol的缩写,安全文件传送协议。可以为传输文件提供
  • #region 判断远程文件是否存在 /// <summary> /// 判断远程文件是否存在 /// </summary> /// <param name="fileUrl"></param> /// <returns...
  • 判断本地文件是否存在 #! bin/sh file=$1 if [ -f "$file" ]; then echo $file else echo "no such file!" fi 以上程序的功能是如果文件file存在,打印file文件名,否则打印 no such file...
  • 基于SFTP文件上传

    2019-03-29 19:10:53
    基于SFTP文件上传 环境及工具 Linux CentOS 7.6 64位 xshell 6.0 xftp 6.0 下载地址: xftp 6.0 及 xshell 6.0 官网链接免费申请. 1.创建用户 添加用户:useradd + 用户名 修改用户密码:passwd + 用户名 我这里...
  • sftp上传文件

    千次阅读 2017-08-31 15:17:02
     * @param del:下载后是否删除sftp文件  * @return  */  public List<String> batchDownLoadFile(String remotePath, String localPath,  String fileFormat, String fileEndFormat, boolean del) ...
  • 功能:判断远程文件是否存在 参数: $url_file -远程文件URL 返回:存在返回true,不存在或者其他原因返回false */ function remote_file_exists($url_file){ //检测输入 $url_file = trim($url_file); ...
  • Python 判断文件/目录是否存在

    千次阅读 2018-08-02 09:24:22
    判断文件是否存在 os.path.isfile(path) 判断目录是否存在 os.path.isdir(path) 判断文件是否存在 # 使用 path 模块 os.path.exists(path) # 使用 access() 方法 os.access(path, os.F_OK) 使用 pathlib ...
  • 玩玩sftp上传文件

    2019-01-08 10:48:20
    首先看一下需求,让做一个把查到的数据放在以dat结尾的文件里,而且文件的格式是unix的格式,再使用linux下的打包方式,打包为以gz结尾的文件,然后再上传到sftp服务器的指定位置上。 public static void main...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,025
精华内容 1,210
关键字:

sftp判断文件是否存在