繁体   English   中英

使用 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文件选择器将所有文件选择为子文件夹,从而成功地在两个文件夹之间复制文件,但仅在将单个文件复制到目录时才会遇到此问题。

最后,我能够找到解决方法。 我不确定上述问题是由于 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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM