Одна копия файла с Apache Commons VFS превратила папку назначения в файл - PullRequest
0 голосов
/ 23 апреля 2020

Я пытаюсь скопировать один файл в локальной файловой системе на удаленный SFTP-сервер, используя Apache Commons VFS. для mimi c фактической проблемы, я написал следующий код, который генерирует ту же проблему.

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, но столкнулся с этой проблемой только при копировании одного файла в каталог.

1 Ответ

0 голосов
/ 23 апреля 2020

Наконец-то я смог найти обходной путь. Я не уверен, является ли эта проблема следствием проблемы в 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);
...