`
maoone2003
  • 浏览: 58418 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用VFS进行sftp传输

阅读更多
偶然的机会了解啦VFS,在研究的过程中不得不对其功能的强大感到叹服,以下虽然是摘抄的代码,但可以作为一个简单的例子,呵呵,其它功能正在研究中。。。
package com.meetexpo.showcase.monitor;

import org.apache.commons.vfs.FileObject;
import org.apache.commons.vfs.FileSystemException;
import org.apache.commons.vfs.FileSystemOptions;
import org.apache.commons.vfs.Selectors;
import org.apache.commons.vfs.cache.DefaultFilesCache;
import org.apache.commons.vfs.impl.DefaultFileSystemManager;
import org.apache.commons.vfs.provider.local.DefaultLocalFileProvider;
import org.apache.commons.vfs.provider.sftp.SftpFileProvider;
import org.apache.commons.vfs.provider.sftp.SftpFileSystemConfigBuilder;
import org.apache.commons.vfs.provider.zip.ZipFileProvider;

/**
 * @author myao Update:2006-7-1810:40:46
 */
public class VfsOp {

  private String _sourceroot = "C:/vfsroot";

  private String _targetroot = "sftp://xxx:xxx@xxxx/doc-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;

  VfsOp() {
    try {
      init();
    } catch (FileSystemException e) {

      e.printStackTrace();
    }
  }

  void init() throws 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();
    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.getChildren().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 = vfsmgr.resolveFile(targetfs, flist[i].getName()
      // .getBaseName());
      // if (!tmp.exists()) {
      // tmp.createFile();
      // }
      //
      // VfsMutiMove t = new VfsMutiMove(flist[i], tmp);
      // t.run();
      // // tmp.copyFrom(flist[i], Selectors.SELECT_SELF);
      // }

      long endTime = System.currentTimeMillis();
      System.out.println(this.getClass().getName());
      System.out.println("Cost time(ms:):" + (endTime - startTime));

    } catch (FileSystemException e) {

      e.printStackTrace();
    }

  }

  private DefaultFileSystemManager getDefaultFileSystemManager() {

    DefaultFileSystemManager mgr = new DefaultFileSystemManager();
    // SFTP 供应者
    SftpFileProvider fp = new SftpFileProvider();
    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.addProvider("file", lf);
      mgr.setFilesCache(new DefaultFilesCache());
      mgr.init();

    } catch (FileSystemException e) {
      // 此处应该改为log
      e.printStackTrace();
    }

    return mgr;
  }

  void getWorkspaceFromProperties() {

    /*
     * Properties tmpProperties; File tmpfile = new
     * File("workspace.properties");
     */

  }

  /**
   * @param args
   * @throws Exception
   */
  public static void main(String[] args) throws Exception {

    VfsOp op = new VfsOp();

    op.moveFile("C:/downloads",
          "sftp://xxxx:xxxx@192.168.1.16/doc-root/myaoVfstest/");

  }

}
1
0
分享到:
评论

相关推荐

    commons-logging-1.2.jar commons-vfs-2.2.jar

    SFTP是FTP的一个安全版本,它使用SSH协议进行数据传输,提供文件访问、文件传输以及文件管理功能,同时确保数据的安全性。 使用Apache Commons VFS的SFTP模块,开发者可以轻松地在代码中实现对远程SFTP服务器的文件...

    commons-vfs-2.1源码

    3. **文件系统提供商**:VFS支持多种文件系统,如本地文件系统、FTP、SFTP(基于SSH的文件传输协议)。每个文件系统都有相应的提供者类,如`SftpFileSystemProvider`,它实现了SFTP文件系统的逻辑。 4. **配置与URL...

    kettle必须的包

    在Kettle中,如果需要与远程服务器通过SFTP进行数据交互,就需要相关的库支持。 解决这个问题的关键在于添加正确的jar包到Java类路径中。在压缩包文件列表中,可能包含了处理SFTP连接的库,如JSch(Java Secure ...

    sftpLoad:使用 sftp 上传文件到远程服务器

    sftp加载 使用 sftp 上传文件到远程服务器 ... stpTransfer.java:在本地计算机和远程服务器之间传输文件:1) 使用 sftp 进行安全文件传输 2) 使用 Apache Commons VFS 提供单个 API 来访问文件系统(例如 SFTP)

    VFSManager - A Commons VFS GUI-开源

    2. **多文件系统支持**:VFSManager集成了Apache Commons VFS的多种文件系统驱动,用户可以通过单一的界面访问FTP服务器、SFTP(SSH文件传输协议)、SMB(服务器消息块,常用于Windows网络共享)、WebDAV(Web分布式...

    FTPS JDK1.4

    5. `commons-vfs-2.0.jar`:Apache Commons VFS(Virtual File System),提供了一种抽象层来访问不同的文件系统,包括FTP和FTPS,使得代码可以独立于具体的文件系统进行操作。 6. `commons-httpclient-3.1.jar`:...

    kettle7常用jar包

    9. **commons-vfs-1.0.jar**:Apache Commons VFS是一个虚拟文件系统库,允许Kettle通过统一的API访问各种类型的文件系统,包括本地文件、FTP、SFTP、HTTP等。 10. **log4j-1.2.12.jar**:Log4j是Apache的一个日志...

    Synology群晖软件功能详表(1)(1).docx

    - **高级功能**:支持压缩/解压缩归档文件,使用Windows ACL编辑器进行高级权限管理,使用远程文件夹功能装载其他SMBv1/SMBv2/NFS文件服务器上的文件夹等。 #### SMB协议支持 - **SMB2/SMB3**:支持SMB2和SMB3协议...

    嵌入式软件面试题整理.pdf

    - **SFTP**:基于SSH协议的文件传输,加密传输。 - **SSH**:安全外壳协议,用于远程登录和管理。 #### 栈区和全局区变量的初值 - **栈区变量**:通常未初始化时值不确定。 - **全局区变量**:默认初始化为0或空...

Global site tag (gtag.js) - Google Analytics