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

use*_*882 6 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());
}
Run Code Online (Sandbox Code Playgroud)

似乎fsManager正确解决它但getChildren()失败了.我发现这sourceDir是一种IMAGINARY类型; 以下代码说明了这一点

logger.debug(sourceDir.getType());
Run Code Online (Sandbox Code Playgroud)

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

错误

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)
Run Code Online (Sandbox Code Playgroud)

小智 12

取决于哪个版本的VFS解决方案会有所不同.对于VFS 2.0,您必须在下面添加其他配置选项.

SftpFileSystemConfigBuilder.getInstance( ).setUserDirIsRoot(opts, false);
Run Code Online (Sandbox Code Playgroud)

  • 我遇到了这个问题,设置此配置选项对我有用.我现在可以通过sftp列出目录内容.Apache文档站点是错误的. (3认同)

ben*_*y23 3

根据文档, SFTP 文件系统不支持获取“目录内容”。