Java-sftptool_第1頁
Java-sftptool_第2頁
Java-sftptool_第3頁
Java-sftptool_第4頁
Java-sftptool_第5頁
已閱讀5頁,還剩12頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、import java.io.File;   import java.io.FileInputStream;   import java.io.IOException;   import java.io.InputStream;   import java.io.OutputStream;   import java.util.ArrayList;   import java.util.List; 

2、0; import java.util.Vector;     import com.jcraft.jsch.Channel;   import com.jcraft.jsch.ChannelSftp;   import com.jcraft.jsch.JSch;   import com.jcraft.jsch.JSchException;   import com.jcraft.jsch.Session

3、;   import com.jcraft.jsch.SftpException;   import mon.util.log.EventLog;     /*   * In order for SSH2 tunneling to function correctly one must ensure that the   *&#

4、160;following line is uncommented in /etc/ssh/sshd_config :   * -CUT-   * # Change to yes to enable tunnelled clear text passwords   * PasswordAuthentication yes   *

5、 -CUT-   * Otherwise the initiation of the tunnel will fail with   * "SSH Initialization failed, try again?   * com.jcraft.jsch.JSchException: Auth fail"   *

6、60;author aimer.xu   *   */  public class SftpHelper extends Thread        private static EventLog log = new EventLog(SftpHelper.class);         

7、     private String host;       private String username;       private String password;       private String location;     &#

8、160; private int port;       private String knowHosts;              private String osName;              private

9、0;List<String> filenames = new ArrayList<String>();              public SftpHelper(String host, String username, String password, int port)     

10、0;      this(host, username, password, port, "");                     public SftpHelper(String host, String username, String&

11、#160;password, int port, String location)            this.host = host;           this.username = username;         

12、  this.password = password;           this.port = port;           osName = System.getProperty("");        &#

13、160;  if (osName.toUpperCase().indexOf("WINDOWS") > -1)                this.knowHosts = "c:known_hosts"           

14、60;   if(location = null | location.length() = 0)                   this.location = "c:"          &#

15、160;                else                this.knowHosts = "/root/.ssh/known_hosts"         

16、      if(location = null | location.length() = 0)                   this.location = "/"        

17、                             this.location = location;                   &#

18、160; public void addFilename(String filename)           filenames.add(filename);                     public void setFilenames(List

19、<String> filenames)           this.filenames = filenames;                public void run()          

20、0;upload();                     /*       * 要上傳的文件必須包含完整的路徑       *        */     

21、0;public boolean upload()           if(filenames.size() = 0)               return false;           Sessio

22、n session;           Channel channel;           JSch jsch = new JSch();           try      

23、0;         jsch.setKnownHosts(knowHosts);               session = jsch.getSession(username, host, port);           

24、    session.setPassword(password);               session.connect();               channel = session.openChannel("sftp");

25、               channel.connect();               ChannelSftp c = (ChannelSftp)channel;           

26、;    c.cd(location);                              InputStream in = null;         

27、0;     OutputStream out = null;               for(int i=0; i<filenames.size(); i+)                

28、;   String filename = filenames.get(i);                   if(filename = null | "".equals(filename)         

29、60;             log.Debug("", "當前沒有要上傳的文件!");                       continue;    

30、0;                                 int idx= filename.lastIndexOf(File.separator);         

31、          String uploadname = filename.substring(idx=-1?0:idx+1);                   out = c.put(uploadname);     &#

32、160;             log.Debug("", "sleeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeep "+5000+"ms!");                  

33、 sleep(5000);                                      in = new FileInputStream(filename);   &

34、#160;                  /              String suffix = filename.substring(filename.lastIndexOf(".")+1);   /

35、0;             if("gz".equals(suffix)   /                  in = new GZIPInputStream(in);   / &#

36、160;                               byte  b = new byte1024;            

37、       int n;                   while (n = in.read(b) != -1)               

38、         out.write(b);                                         &#

39、160;       out.flush();               out.close();               in.close();         

40、      c.disconnect();               session.disconnect();               sleep(500);        

41、0;      return true;            catch (JSchException e)                e.printStackTrace();      

42、60;     catch (SftpException e)                e.printStackTrace();            catch (IOException e)     

43、           e.printStackTrace();            catch(InterruptedException e)               e.printStackTrace();  &

44、#160;                   return false;                     public static void main(String args)

45、          String username = "root"           String host = "*.*.*.*"           int port =&

46、#160;22;           String password = "*"           String path = "/home/data/download/"           Sf

47、tpHelper helper = new SftpHelper(host, username,password, port,path);           helper.addFilename("c:bcp.sql");           helper.addFilename("c:a.sql"

48、;);   /      helper.upload("c:bcp.sql");           helper.start();                       import java

49、.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.util.ArrayList;import java.util.List;import java.util.Vector;import com.jcraft.jsch.Channel;import com.jcraft.jsch.ChannelSftp;import com.jcraft.jsch.JSch;import com.

50、jcraft.jsch.JSchException;import com.jcraft.jsch.Session;import com.jcraft.jsch.SftpException;import mon.util.log.EventLog;/* * In order for SSH2 tunneling to function correctly one must ensure that the * following line is uncommented in /etc/ssh/sshd_config : * -CUT- * # Change to yes to enable tun

51、nelled clear text passwords * PasswordAuthentication yes * -CUT- * Otherwise the initiation of the tunnel will fail with * "SSH Initialization failed, try again? * com.jcraft.jsch.JSchException: Auth fail" * author aimer.xu * */public class SftpHelper extends Thread private static EventLog

52、 log = new EventLog(SftpHelper.class);private String host;private String username;private String password;private String location;private int port;private String knowHosts;private String osName;private List<String> filenames = new ArrayList<String>();public SftpHelper(String host, String

53、 username, String password, int port) this(host, username, password, port, "");public SftpHelper(String host, String username, String password, int port, String location) this.host = host;this.username = username;this.password = password;this.port = port;osName = System.getProperty("o

54、");if (osName.toUpperCase().indexOf("WINDOWS") > -1) this.knowHosts = "c:known_hosts" if(location = null | location.length() = 0) this.location = "c:" else this.knowHosts = "/root/.ssh/known_hosts" if(location = null | location.length() = 0) this

55、.location = "/" this.location = location;public void addFilename(String filename)filenames.add(filename);public void setFilenames(List<String> filenames)this.filenames = filenames;public void run()upload();/* * 要上傳的文件必須包含完整的路徑 * */public boolean upload()if(filenames.size() = 0)return

56、 false;Session session;Channel channel;JSch jsch = new JSch();try jsch.setKnownHosts(knowHosts);session = jsch.getSession(username, host, port);session.setPassword(password);session.connect();channel = session.openChannel("sftp");channel.connect();ChannelSftp c = (ChannelSftp)channel;c.cd(

57、location);InputStream in = null;OutputStream out = null;for(int i=0; i<filenames.size(); i+)String filename = filenames.get(i);if(filename = null | "".equals(filename)log.Debug("", "當前沒有要上傳的文件!");continue;int idx= filename.lastIndexOf(File.separator);String uploadnam

58、e = filename.substring(idx=-1?0:idx+1);out = c.put(uploadname);log.Debug("", "sleeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeep "+5000+"ms!");sleep(5000);in = new FileInputStream(filename);/String suffix = filename.substring(filename.lastIndexOf(".")+1);/if("

59、gz".equals(suffix)/in = new GZIPInputStream(in);/byte b = new byte1024;int n;while (n = in.read(b) != -1) out.write(b);out.flush();out.close();in.close();c.disconnect();session.disconnect();sleep(500);return true; catch (JSchException e) e.printStackTrace(); catch (SftpException e) e.printStack

60、Trace(); catch (IOException e) e.printStackTrace(); catch(InterruptedException e)e.printStackTrace();return false;public static void main(String args)String username = "root"String host = "*.*.*.*"int port = 22;String password = "*"String path = "/home/data/downloa

61、d/"SftpHelper helper = new SftpHelper(host, username,password, port,path);helper.addFilename("c:bcp.sql");helper.addFilename("c:a.sql");/helper.upload("c:bcp.sql");helper.start(); 請注意類的注釋部分,known_hosts文件的內容如下:Java代碼 90 ssh-rsa AAAAB3NzaC1yc2

62、EAAAABIwAAAIEA6tHmMBQwcSieFneaObnDyzthMSn1FyWFp/TCMV4rt+ZEtOZo49GK0kdM3tYy1IQD8hZz016JG5uOIbrBN+O0BtzY89y3uIwo0hsYQtP/LKAR5BU+pT3R20ltVbcEGzrSpKiSClObD9MbiOt0899Du9bG89/BiMvxUxj/Rhg33l0=  90 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEA6tHmMBQwcSieFneaObnDyzthMSn1FyWFp/TCMV4rt+ZEtOZo49GK0k

63、dM3tYy1IQD8hZz016JG5uOIbrBN+O0BtzY89y3uIwo0hsYQtP/LKAR5BU+pT3R20ltVbcEGzrSpKiSClObD9MbiOt0899Du9bG89/BiMvxUxj/Rhg33l0=  寫道附:產生此文件的簡單方法:可以在Linux中用ssh命令登錄一次,這樣便在/root/.ssh(假如使用root用戶登錄到Linux)目錄下生成known_hosts文件。 /* * */package com.test.tool;import mons.vfs.FileObject; import mons.vfs.FileSyst

64、emException; import mons.vfs.FileSystemOptions; import mons.vfs.Selectors; import mons.vfs.cache.DefaultFilesCache; import mons.vfs.impl.DefaultFileSystemManager; import vider.local.DefaultLocalFileProvider; import vider.sftp.SftpFileProvider; import vider.sftp.Sf

65、tpFileSystemConfigBuilder; import vider.zip.ZipFileProvider; import mons.logging.*;/* 15. * author myao Update:2006-7-1810:40:46 16. */ public class AutoChecker private String _sourceroot = "C:/vfsroot" private String _targetroot = "sftp:/odpuser:odpuser1:22/doc

66、-root/myaoVfstest/" / b1:f1:ef:26:3e:5f:a5:0d:70:fa:5e:df:d9:6b:55:41 private FileObject localfs, targetfs; private DefaultFileSystemManager vfsmgr; private Log log = LogFactory.getLog(AutoChecker.class); AutoChecker() try init(); catch (FileSystemException e) e.printStackTrace(); void init() t

67、hrows FileSystemException vfsmgr = getDefaultFileSystemManager(); void moveFile(String sourcePath, String targetPath) throws FileSystemException localfs = vfsmgr.resolveFile(sourcePath); if (!localfs.exists() localfs.createFolder(); / localfs. / vfsmgr. FileSystemOptions opts = new FileSystemOptions

68、(); SftpFileSystemConfigBuilder.getInstance().setStrictHostKeyChecking( opts, "no"); targetfs = vfsmgr.resolveFile(targetPath, opts); if (!targetfs.exists() targetfs.createFolder(); try long startTime = System.currentTimeMillis(); / System.out.println("Source File:" + source.getC

69、hildren().length); targetfs.copyFrom(localfs, Selectors.SELECT_FILES); / System.out.println("Target File:" + target.getChildren().length); / TODO 要想辦法用遍歷的方法來拷貝文件,否則無法留下拷貝的細節。 /正在裝載數據 / FileObject flist = localfs.getChildren(); / for (int i = 0; i < flist.length; i+) / FileObject tmp = v

70、fsmgr.resolveFile(targetfs, flisti.getName() / .getBaseName(); / if (!tmp.exists() / tmp.createFile(); / / / VfsMutiMove t = new VfsMutiMove(flisti, tmp); / t.run(); / / tmp.copyFrom(flisti, Selectors.SELECT_SELF); / long endTime = System.currentTimeMillis(); System.out.println(this.getClass().getNa

71、me(); System.out.println("Cost time(ms:):" + (endTime - startTime); catch (FileSystemException e) e.printStackTrace(); private DefaultFileSystemManager getDefaultFileSystemManager() DefaultFileSystemManager mgr = new DefaultFileSystemManager(); / SFTP 供應者 SftpFileProvider fp = new SftpFile

72、Provider(); FileSystemOptions t = new FileSystemOptions(); / ZIP 供應者 ZipFileProvider zp = new ZipFileProvider(); / 缺省本地文件供應者 DefaultLocalFileProvider lf = new DefaultLocalFileProvider(); try / common-vfs 中 文件管理器的使用范例 mgr.addProvider("sftp", fp); mgr.addProvider("zip", zp); mgr.ad

73、dProvider("file", lf); mgr.setFilesCache(new DefaultFilesCache(); mgr.init(); catch (FileSystemException e) / 此處應該改為log e.printStackTrace(); return mgr; void getWorkspaceFromProperties() /* * Properties tmpProperties; File tmpfile = new * File("perties"); */ /* 138.

74、* param args 139. * throws Exception 140. */ public static void main(String args) throws Exception AutoChecker op =new AutoChecker(); op.moveFile("C:/downloads", "sftp:/odpuser:odpuser1:22/etc/services"); VFSTest.javaimport java.io.IOException;import mons.vfs.FileConte

75、nt;import mons.vfs.FileObject;import mons.vfs.FileSystemManager;import mons.vfs.FileType;import mons.vfs.VFS;public class VFSTest     public static void main(String args) throws IOException                 FileSyste

76、mManager fsManager = VFS.getManager();        FileObject fo = fsManager.resolveFile("ftp:/ftpusername:ftppassword:21/dir/dir1/");        FileObject children = fo.getChildren();/得到遠程文件列表    

77、       for ( int i = 0; i < children.length; i+ )                            FileObject f = children i ;     

78、60;              FileContent c = f.getContent();                          File localFile = new File(f.getName().get

79、BaseName();                   FileOutputStream out = new FileOutputStream(localFile);                   mons.io.IOUtils.

80、copy(c.getInputStream(), out);/寫入本地/或使用寫入                FileObject obj = fileSystemManager.resolveFile(this.getTargetResourceURL()+f.getName().getBaseName();           &

81、#160;                   if(!obj.exists()                    obj.createFile();       &

82、#160;            obj.copyFrom(f, Selectors.SELECT_SELF);                              final long size = ( f.ge

83、tType() = FileType.FILE ) ? c.getSize() : -1;            final long date = ( f.getType() = FileType.FILE ) ? c.getLastModifiedTime() : -1;            System.out.println( f.getName().getPath(

84、)+ " date:" + date + " Size:" + size  );            連接SFTPFileSystemManager fsManager = VFS.getManager();    FileSystemOptions opts = new FileSystemOptions();            SftpFileSystemConfigBuilder.getInstance().setStrictHostKeyChecking(opts, "no");

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論