[英]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.