Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Apache Commons VFS将目标文件夹复制到一个文件中_Java_Apache Commons_Vfs_Apache Commons Vfs - Fatal编程技术网

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

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

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

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提供的所有标准文件选择器,都得到了相同的结果。它将远程文件夹转换为文件,而不是复制文件。