7

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)
4

4 に答える 4

11

VFS ソリューションのバージョンによって異なります。VFS 2.0 の場合、以下の構成オプションを追加する必要があります。

SftpFileSystemConfigBuilder.getInstance( ).setUserDirIsRoot(opts, false);
于 2012-04-04T13:31:24.933 に答える
3

ドキュメントによると、「ディレクトリの内容」を取得することは、SFTP ファイルシステムではサポートされていません。

于 2012-03-12T09:38:16.417 に答える