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
Post a Comment