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
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.
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();
}
}
}
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());
}
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();
}
}
}