使用 Apache Commons VFS 将目标文件夹复制到一个文件中

Single file copy with Apache Commons VFS made destination folder into a file

我正在尝试使用 Apache Commons VFS 将本地文件系统中的单个文件复制到远程 SFTP 服务器。为了模拟实际问题,我编写了以下生成相同问题的代码。

FileSystemManager fileSystemManager = VFS.getManager();
FileObject fileToCopy = fileSystemManager.resolveFile("/tmp/submission/2004220.csv");
FileObject destinationDirectory = fileSystemManager.resolveFile("/tmp/test");
destinationDirectory.copyFrom(fileToCopy,Selectors.SELECT_SELF);

执行上述代码时,/tmp/test 目录将转换为文件,而不是将 2004220.csv 文件复制到 /tmp/test 文件夹中。通过 Selectors.SELECT_CHILDREN Fileselector 选择所有文件作为子文件,我能够成功地在两个文件夹之间复制文件,但只有在将单个文件复制到目录时才会遇到这个问题。

最后,我找到了解决方法。我不确定上述问题是否是由于 VFS 中的问题引起的,或者这不是 VFS 期望处理文件夹之间的单个文件复制的方式。无论如何,这是我的解决方案。

如果您想在 FileObject 中保留完整的文件路径,

FileSystemManager fileSystemManager = VFS.getManager();
FileObject fileToCopy = fileSystemManager.resolveFile("/tmp/submission/2004220.csv");
FileObject destinationDirectory = fileSystemManager.resolveFile("/tmp/test");
NameFileFilter nameFileFilter = new NameFileFilter(Arrays.asList(fileToCopy.getName().getBaseName()));
FileSelector fileSelector = new FileFilterSelector(nameFileFilter);
destinationDirectory.copyFrom(fileToCopy.getParent(),fileSelector);

否则,

FileSystemManager fileSystemManager = VFS.getManager();
FileObject fileToCopy = fileSystemManager.resolveFile("/tmp/submission");
FileObject destinationDirectory = fileSystemManager.resolveFile("/tmp/test");
NameFileFilter nameFileFilter = new NameFileFilter(Arrays.asList("2004220.csv"));
FileSelector fileSelector = new FileFilterSelector(nameFileFilter);
destinationDirectory.copyFrom(fileToCopy,fileSelector);