java - 使用 Apache Commons VFS 将目标文件夹复制到文件中
问题描述
我正在尝试使用 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);
推荐阅读
- php - 如何在 php 中使用 substr 来忽略重音字符?
- android - StatefulWidget 颤动的这个小部件属性是什么
- node.js - 如何从nodejs路由到本地上传的图像文件mysql
- c# - 在 iPhone XS 的右边缘点击不工作
- google-sheets - 如何在 Google 表格的 QUERY 中选择特定单元格?
- android - 在 ARCore Android 中将对象放在摄像头前面
- java - 如何解决 init 方法调用失败:java.lang.AbstractMethodError
- python - 在将数据输入 svm 之前,我可以对我的数据(0-1 个特征 + tfidf 分数作为特征)尝试哪些降维技术
- kubernetes - 使用 istio 或其他 sidecar 代理的延迟惩罚
- mysql - 跨大量行运行 SUM