我们有一台使用以下惯例的服务器:
/pathA/Users/
/pathB/data/
当用户登录时,他们最终会找到相应的/pathA/Users/user/
目录,但他们有时需要访问/pathB/data/
。我想编写一个浏览器,使用sftp,让用户浏览服务器的内容(我很乐意找到一个java工具,我可以插入我的应用程序,但找不到符合我所有要求的东西) 。
我遇到的问题是apache-commons-vfs
接受一个表格
sftp://user:password@host
并使用它来登录用户目录并将该目录视为根。结果是我无法超越该目录,在相应的getParent()
上调用FileObject
会返回null
。我知道使用sftp over terminal可以超越用户主目录,所以我猜这是apache-commons-vfs
库强加的限制。有人会碰巧知道我是否可以解决这个问题,以便可以浏览整个服务器吗?
答案 0 :(得分: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();
}
}
}