List all files in remote server using Jsch

后端 未结 4 374
萌比男神i
萌比男神i 2021-01-14 02:38

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..

But my problem is JSCH list all the

相关标签:
4条回答
  • 2021-01-14 02:42

    for sftp you can getlist of file with

    Vector<ChannelSftp.LsEntry> list = channelSftp.ls("*.*");
    for(ChannelSftp.LsEntry entry:list) {
        System.out.println(entry.getFilename());
    }
    

    and there isn't built in function to get list file for exec and shell protocol, you have parse it from InputStream data.

    0 讨论(0)
  • 2021-01-14 02:50

    Use LSEntrySelector for accessing the properties of returned file list.

    import java.util.Vector;
    
    import com.jcraft.jsch.Channel;
    import com.jcraft.jsch.ChannelSftp;
    import com.jcraft.jsch.JSch;
    import com.jcraft.jsch.Session;
    import com.jcraft.jsch.ChannelSftp.LsEntrySelector;
    import com.jcraft.jsch.ChannelSftp.LsEntry;
    
    
    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<String> filelist=new Vector<String>();
    
                LsEntrySelector selector = new LsEntrySelector() {
                    public int select(LsEntry entry)  {
                        final String filename = entry.getFilename();
                        if (filename.equals(".") || filename.equals("..")) {
                            return CONTINUE;
                        }
                        if (entry.getAttrs().isLink()) {
                            filelist.addElement(filename);
                        }
                        else if (entry.getAttrs().isDir()) {
                            //if (keepDirectory(filename)) {
                            filelist.addElement(entry.getFilename());
                            //}
                        }
                        else {
                            //if (keepFile(filename)) {
                            filelist.addElement(entry.getFilename());
                            //}
                        }
                        return CONTINUE;
                    }
                };
                channelSftp.ls(SFTPWORKINGDIR,selector);
                for(int i=0; i<filelist.size();i++){
                    System.out.println(filelist.get(i).toString());
                }
    
            }catch(Exception ex){
                ex.printStackTrace();
            }
        }
    }
    
    0 讨论(0)
  • 2021-01-14 02:50

    try to exec ls command :

    Channel channel=session.openChannel("exec"); 
    ((ChannelExec)channel).setCommand("cd " + SFTPWORKINGDIR + " && ls");
    channel.connect();
    channel.run();
    
    Vector filelist = channel.run();
    for (int i = 0; i < filelist.size(); i++) {
        System.out.println(filelist.get(i).toString());
    }
    
    0 讨论(0)
  • 2021-01-14 03:04

    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();
            }
        }
    }
    
    0 讨论(0)
提交回复
热议问题