Downloading Multiple Files via SFTP using Java -


i new java , trying write script pull multiple files various sftp sites daily.

i have code below pull 1 file 1 site , works, struggling find how modify code download multiple files. example files in remote directory, or files containing letters

can advise me on please?

code:-

package package1;    import java.io.bufferedinputstream;   import java.io.bufferedoutputstream;   import java.io.file;   import java.io.fileoutputstream;   import java.io.outputstream;   import com.jcraft.jsch.channel;   import com.jcraft.jsch.channelsftp;   import com.jcraft.jsch.jsch;   import com.jcraft.jsch.session;      public class sftppullsshkeys {   public sftppullsshkeys() {                             }  public static void main(string[] args) {           string sftphost = "ip";           int    sftpport = 22;           string sftpuser = "username";           string passphrase = "passphrase";           string sftpworkingdir = "remote directory";             string prikeyfile = "c:\\open ssh key.ppk";           session     session     = null;           channel     channel     = null;           channelsftp channelsftp = null;    try{           jsch jsch = new jsch();           jsch.addidentity(prikeyfile, passphrase);         session = jsch.getsession(sftpuser,sftphost,sftpport);           session.setconfig("stricthostkeychecking", "no");          session.connect();           channel = session.openchannel("sftp");           channel.connect();           channelsftp = (channelsftp)channel;           channelsftp.cd(sftpworkingdir);           byte[] buffer = new byte[1024];           bufferedinputstream bis = new bufferedinputstream(channelsftp.get("file.csv"));           file newfile = new file("c:\\file.csv");          outputstream os = new fileoutputstream(newfile);           bufferedoutputstream bos = new bufferedoutputstream(os);           int readcount;    while         ( (readcount = bis.read(buffer)) > 0) {           system.out.println("writing files disk: " );           bos.write(buffer, 0, readcount);           }           bis.close();           bos.close();           }catch(exception ex){           ex.printstacktrace();            }        }        }  

you can directory listing , iterate through it:

    try {             channel.connect();             logger.info("shell channel connected....");                      } catch(jschexception e) {             logger.warning("could not connect: " + e.tostring());             logstreamforemail.close();          }          if (!channel.isconnected()) {              // close log stream email.  causes write output byte array output stream, can dump email body texts             logstreamforemail.close();              // send warning email, not connect             new sendemail(warningemailaddress, "sftp warning: not connect host", baosforemail.tostring());         } else {                try {                    channelsftp c = (channelsftp) channel;                    c.lcd(localdir);                 logger.info("lcd " + c.lpwd());                  // listing of remote directory                 @suppresswarnings("unchecked")                 vector<channelsftp.lsentry> list = c.ls(".");                  logger.info("ls .");                  // iterate through objects in list, identifying specific file names                 (channelsftp.lsentry olistitem : list) {                     // output each item directory listing logs                     logger.info(olistitem.tostring());                       // if file (not directory)                     if (!olistitem.getattrs().isdir()) {                         // grab remote file ([remote filename], [local path/filename write file to])                          logger.info("get " + olistitem.getfilename());                         c.get(olistitem.getfilename(), olistitem.getfilename());  // while testing, disable or of test files grabbed                          grabcount++;                           // delete remote file                         //c.rm(olistitem.getfilename());  // note sftp grabs remote host, deleting file unnecessary,                                                            //   system automatically moves item 'downloaded' subfolder                                                           //   after has been grabbed.  other target hosts, un comment line remove downloaded files inbox.                     }                 }                  // report files grabbed log                 if (grabcount == 0) {                      logger.info("found no new files grab.");                 } else {                     logger.info("retrieved " + grabcount + " new files.");                 }                                        } catch(sftpexception e) {                 logger.warning(e.tostring());             } {                 // disconnect session.  if not done, job hang , leave log files locked                 session.disconnect();                 logger.info("session closed");             } 

you can replace 'logger.warning' , 'logger.info' system.out.println if not using logger.


Comments

Popular posts from this blog

linux - xterm copying to CLIPBOARD using copy-selection causes automatic updating of CLIPBOARD upon mouse selection -

qt - Errors in generated MOC files for QT5 from cmake -