java - Commons VFS - 无法列出目录的内容

标签 java sftp apache-commons-vfs

我对 Commons VFS 有疑问。我想使用 SFTP 连接到一个目录并列出它。这是代码:

FileSystemOptions opts = new FileSystemOptions();
SftpFileSystemConfigBuilder.getInstance().setStrictHostKeyChecking(opts, "no");
FileSystemManager fsManager = VFS.getManager();

FileObject sourceDir = fsManager.resolveFile(sourceUrl, opts);
FileObject targetDir = fsManager.resolveFile(config.get("to"));

for (FileObject sourceFile : sourceDir.getChildren()) { // here is the problem
    FileObject targetFile = fsManager.resolveFile(targetDir + "/" + nodeName + "_"
            + sourceFile.getName().getBaseName());
    logger.debug("Copying files. Source: " + sourceFile.getName().getPath() + " Target: "
            + targetFile.getName().getPath());
}

似乎 fsManager 正确解析了它,但 getChildren() 失败了。我发现 sourceDir 是一个 IMAGINARY 类型;下面的代码说明了这一点

logger.debug(sourceDir.getType());

我检查了文件,它是一个普通文件夹 - 不是链接或类似的东西。

错误

org.apache.commons.vfs2.FileNotFolderException: Could not list the contents of "sftp://path/to/dir" because it is not a folder.
    at org.apache.commons.vfs2.provider.AbstractFileObject.getChildren(AbstractFileObject.java:693)
    at pkg.services.impl.QuartzJobEventLog.downloadEventLogs(QuartzJobEventLog.java:64)
    at pkg.services.impl.QuartzJobEventLog.executeJob(QuartzJobEventLog.java:37)
    at pkg.services.impl.AbstractQuartzJob.execute(AbstractQuartzJob.java:25)
    at $QuartzJob_1360635dbcd.execute($QuartzJob_1360635dbcd.java)
    at org.quartz.core.JobRunShell.run(JobRunShell.java:203)
    at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:520)

最佳答案

根据不同版本的VFS解决方案会有所不同。对于 VFS 2.0,您必须在下面包含其他配置选项。

SftpFileSystemConfigBuilder.getInstance( ).setUserDirIsRoot(opts, false);

关于java - Commons VFS - 无法列出目录的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9664510/

相关文章:

java - 通过Java配置定义Spring RestController

python - 通过 Paramiko SFTP 上传文件不起作用

java - 在 Java 中检查服务器上是否存在该路径

java - Apache VFS sftp-正在获取多个文件对象来创建多个 session 或 channel ?

java - 所有文件选择器。如何排除当前目录

java - Weka - 如何在 Java 中使用分类器

java - ReSTLet 的 OAuth 扩展在 Maven 中在哪里?

java - 将 JSON 字符串解析为 Java Double 时出现 NumberFormatException

maven - 使用 Maven 通过 SFTP 传输 Artifact

java - Commons-vfs 模拟一个文件系统