@SneakyThrows
public static void copyIndex(ByteBuffersDirectory ramDirectory, Path destination) {
FSDirectory fsDirectory = FSDirectory.open(destination);
Arrays.stream(ramDirectory.listAll())
.forEach(fileName -> {
try {
// IOContext is null because in fact is not used (at least for the moment)
fsDirectory.copyFrom(ramDirectory, fileName, fileName, null);
} catch (IOException e) {
log.error(e.getMessage(), e);
}
});
}
2条答案
按热度按时间rekjcdws1#
您可以使用
copyFrom
方法来执行此操作。例如:
您使用的是
ByteBuffersDirectory
:假设您没有同时向该
dir
写入任何新数据,则可以声明一个要写入数据的目标-例如,FSDirectory
(文件系统目录):对
OUT_DIR_PATH
位置使用您想要的任何字符串。然后,您可以迭代原始
dir
对象中的所有文件,将它们写入新的to
位置:这将创建新的
OUT_DIR_PATH
目录,并使用文件填充该目录,例如:...或您的
dir
中碰巧存在的任何文件。警告:
我只在一个默认的
IOContext
对象中使用了这个函数。还有其他的上下文构造函数--不知道它们是做什么的。我认为它们给予你更好地控制写操作的执行。m1m5dgzv2#
同时,我自己摸索出了一个简单明了的方法: