Tôi gặp sự cố với Commons VFS. Tôi muốn kết nối với một thư mục bằng SFTP và liệt kê nó. Đây là mã:Commons VFS - Không thể liệt kê nội dung của thư mục
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());
}
Dường như fsManager
giải quyết nó một cách chính xác nhưng getChildren()
thất bại. Tôi phát hiện ra rằng sourceDir
là loại IMAGINARY
; đoạn mã sau nói rằng nó
logger.debug(sourceDir.getType());
Tôi đã kiểm tra tệp và đó là một thư mục thông thường - không phải liên kết hoặc một thứ gì đó tương tự.
Lỗi
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)
Xem @ câu trả lời của Max. – hotshot309