Java 使用Apache Commons VFS将目标文件夹复制到一个文件中
我正在尝试使用ApacheCommonsVFS将本地文件系统中的单个文件复制到远程SFTP服务器。为了模拟实际问题,我编写了以下生成相同问题的代码Java 使用Apache Commons VFS将目标文件夹复制到一个文件中,java,apache-commons,vfs,apache-commons-vfs,Java,Apache Commons,Vfs,Apache Commons Vfs,我正在尝试使用ApacheCommonsVFS将本地文件系统中的单个文件复制到远程SFTP服务器。为了模拟实际问题,我编写了以下生成相同问题的代码 FileSystemManager FileSystemManager=VFS.getManager(); FileObject fileToCopy=fileSystemManager.resolveFile(“/tmp/submission/2004220.csv”); FileObject destinationDirectory=fileSy
FileSystemManager FileSystemManager=VFS.getManager();
FileObject fileToCopy=fileSystemManager.resolveFile(“/tmp/submission/2004220.csv”);
FileObject destinationDirectory=fileSystemManager.resolveFile(“/tmp/test”);
destinationDirectory.copyFrom(fileToCopy,Selectors.SELECT\u SELF);
执行上述代码时,将
/tmp/test
目录转换为文件,而不是将2004220.csv
文件复制到/tmp/test
文件夹中。通过选择器选择所有文件作为子文件,我能够成功地在两个文件夹之间复制文件。选择\u 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);
您是否尝试过remote.copyFrom(localFile,Selectors.SELECT_SELF)?如本例所示:是的,我尝试了VFS提供的所有标准文件选择器,都得到了相同的结果。它将远程文件夹转换为文件,而不是复制文件。