使用 VFS 实现 "Move" 函数
Implementing "Move" function with VFS
我正在尝试使用 Xodus 实现一个包装的 "move" 函数,但有些地方不对劲:
@Override
public boolean move(String appId, String name, String targetName) {
final boolean[] success = new boolean[1];
final Environment env = manager.getEnvironment(xodusRoot, appId);
final VirtualFileSystem vfs = manager.getVirtualFileSystem(env);
env.executeInTransaction(
new TransactionalExecutable() {
@Override
public void execute(@NotNull final Transaction txn) {
File file = vfs.openFile(txn, name, false);
InputStream input = vfs.readFile(txn, file);
if(input != null) {
File targetFile = vfs.openFile(txn, targetName, true);
DataOutputStream output = new DataOutputStream(vfs.writeFile(txn, targetFile));
try {
output.write(ByteStreams.toByteArray(input));
} catch (IOException e) {
e.printStackTrace();
}
vfs.deleteFile(txn, name);
success[0] = true;
}
}
});
// vfs.shutdown();
// env.close();
return success[0];
}
问题是文件被移动但字节数组没有被复制,不确定问题是否是因为同一事务中的多个 VFS 操作。有人能告诉我为什么源文件中的字节没有被正确复制吗?
您似乎正在尝试实施另一个版本的 VirtualFileSystem.renameFile(..)
。
我正在尝试使用 Xodus 实现一个包装的 "move" 函数,但有些地方不对劲:
@Override
public boolean move(String appId, String name, String targetName) {
final boolean[] success = new boolean[1];
final Environment env = manager.getEnvironment(xodusRoot, appId);
final VirtualFileSystem vfs = manager.getVirtualFileSystem(env);
env.executeInTransaction(
new TransactionalExecutable() {
@Override
public void execute(@NotNull final Transaction txn) {
File file = vfs.openFile(txn, name, false);
InputStream input = vfs.readFile(txn, file);
if(input != null) {
File targetFile = vfs.openFile(txn, targetName, true);
DataOutputStream output = new DataOutputStream(vfs.writeFile(txn, targetFile));
try {
output.write(ByteStreams.toByteArray(input));
} catch (IOException e) {
e.printStackTrace();
}
vfs.deleteFile(txn, name);
success[0] = true;
}
}
});
// vfs.shutdown();
// env.close();
return success[0];
}
问题是文件被移动但字节数组没有被复制,不确定问题是否是因为同一事务中的多个 VFS 操作。有人能告诉我为什么源文件中的字节没有被正确复制吗?
您似乎正在尝试实施另一个版本的 VirtualFileSystem.renameFile(..)
。