使用Jsch列出远程服务器中的所有文件 [英] List all files in remote server using Jsch

查看:887
本文介绍了使用Jsch列出远程服务器中的所有文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用JSCH从远程服务器列出所有文件/目录,我也可以获取所有信息..

I am trying to list all the files/directory from a remote server using JSCH and i can able to get all the information as well..

但我的问题是JSCH列出所有具有文件创建日期,时间戳,读/写权限等类型的文件..,

But my problem is JSCH list all the files with file creation date, time stamp, type of read/write permission etc..,

但在我的情况下我只需要文件/目录远程服务器中的名称,不需要其他信息..

But in my case i need only the file/directory name in the remote server and no additional information's are required..

以下是我的java代码..

Below is my piece of java code..

import java.util.Vector;

import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;


public class Listremoteserver {


    /**
     * @param args
     */
    @SuppressWarnings("unchecked")
    public static void main(String[] args) {
        String SFTPHOST = "xxxxx";
        int    SFTPPORT = 22;
        String SFTPUSER = "xxx";
        String SFTPPASS = "xxxxx";
        String SFTPWORKINGDIR = "/root";

        Session     session     = null;
        Channel     channel     = null;
        ChannelSftp channelSftp = null;

        try{
            JSch jsch = new JSch();
            session = jsch.getSession(SFTPUSER,SFTPHOST,SFTPPORT);
            session.setPassword(SFTPPASS);
            java.util.Properties config = new java.util.Properties();
            config.put("StrictHostKeyChecking", "no");
            session.setConfig(config);
            session.connect();
            channel = session.openChannel("sftp");
            channel.connect();
            channelSftp = (ChannelSftp)channel;
            channelSftp.cd(SFTPWORKINGDIR);
            Vector filelist = channelSftp.ls(SFTPWORKINGDIR);
            for(int i=0; i<filelist.size();i++){
                System.out.println(filelist.get(i).toString());
            }

        }catch(Exception ex){
            ex.printStackTrace();
        }
    }
}

上述计划的结果是

-rw-r--r--    1 root     root         3161 Feb 11  2014 install.log.syslog
-rw-r--r--    1 root     root           18 May 20  2009 .bash_logout
-rw-r--r--    1 root     root          176 Sep 23  2004 .bashrc
-rw-r--r--    1 root     root          176 May 20  2009 .bash_profile
-rw-r--r--    1 root     root          129 Dec  3  2004 .tcshrc
-rw-------    1 root     root         1114 Feb 11  2014 anaconda-ks.cfg
dr-xr-x---    2 root     root         4096 Feb 11  2014 .
-rw-r--r--    1 root     root         9169 Feb 11  2014 install.log
-rw-------    1 root     root         1055 Feb 11  2014 .bash_history
-rw-r--r--    1 root     root          100 Sep 23  2004 .cshrc
dr-xr-xr-x   24 root     root         4096 Feb 12 04:19 ..


推荐答案

尝试运行此代码。这里我们将列表元素类型转换为LsEntry,然后打印所需的属性。

Try running this code. Here we are typecasting the list elements to LsEntry and then printing the required attribute.

import java.io.File;
import java.util.Vector;

import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.ChannelSftp.LsEntry;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;


public class Listremoteserver {


    /**
     * @param args
     */
    @SuppressWarnings("unchecked")
    public static void main(String[] args) {
        String SFTPHOST = "xxxxx";
        int    SFTPPORT = 22;
        String SFTPUSER = "xxx";
        String SFTPPASS = "xxxxx";
        String SFTPWORKINGDIR = "/tmp";
        String SFTPPRIVATEKEY = "/path/to/xxxxxxxxx.pem";

        Session     session     = null;
        Channel     channel     = null;
        ChannelSftp channelSftp = null;

        try{
            JSch jsch = new JSch();
            File privateKey = new File(SFTPPRIVATEKEY);
            if(privateKey.exists() && privateKey.isFile())
                jsch.addIdentity(SFTPPRIVATEKEY);
            session = jsch.getSession(SFTPUSER,SFTPHOST,SFTPPORT);
            session.setPassword(SFTPPASS);
            java.util.Properties config = new java.util.Properties();
            config.put("StrictHostKeyChecking", "no");
            session.setConfig(config);
            session.connect();
            channel = session.openChannel("sftp");
            channel.connect();
            channelSftp = (ChannelSftp)channel;
            channelSftp.cd(SFTPWORKINGDIR);
            Vector filelist = channelSftp.ls(SFTPWORKINGDIR);
            for(int i=0; i<filelist.size();i++){
                LsEntry entry = (LsEntry) filelist.get(i);
                System.out.println(entry.getFilename());
            }
        }catch(Exception ex){
            ex.printStackTrace();
        } finally {
            if(session != null) session.disconnect();
            if(channel != null) channel.disconnect();
        }
    }
}

这篇关于使用Jsch列出远程服务器中的所有文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆