1

我们有一个使用以下约定的服务器:

/pathA/Users/
/pathB/data/

当用户登录时,他们最终会进入各自的/pathA/Users/user/目录,但有时他们需要访问/pathB/data/. 我想编写一个浏览器,使用 sftp,让用户浏览服务器的内容(我很高兴找到一个 java 工具,我可以插入我的应用程序,但找不到任何符合我所有要求的东西) . 我遇到的问题是apache-commons-vfs接受一串表格

sftp://user:password@host 

并使用它登录到用户目录并将该目录视为 root。效果是我无法超越该目录,调用getParent()相应的FileObject返回null。我知道可以在终端上使用 sftp 跨过用户主目录,所以我想这是apache-commons-vfs库施加的限制。有人会碰巧知道我是否可以解决这个问题,以便可以浏览整个服务器吗?

4

1 回答 1

1

嗯,你实际上可以。检查此代码!

public class Test {

    public static void main(String[] args) throws Exception {
        FileSystemOptions opts = new FileSystemOptions();
        SftpFileSystemConfigBuilder.getInstance().setStrictHostKeyChecking(opts, "no");
        SftpFileSystemConfigBuilder.getInstance().setUserDirIsRoot(opts, false);
        FileSystemManager fileSystemManager = VFS.getManager();
        FileObject fileObject = fileSystemManager
                .resolveFile("sftp://user:password@host/",opts);

        // foo is under SERVER ROOT not USER's!!!

        FileObject temp = fileObject.resolveFile("/foo/faa/frog/");
        FileObject fileObjects[] = temp.getChildren();

        try {
            for (FileObject j : fileObjects) {

                System.out.println(j.getName().getBaseName());
                j.close();
            }
        } finally {
            fileObject.close();
            temp.close();
        }
    }
}
于 2015-03-26T07:54:25.493 回答