gpt4 book ai didi

java - Apache VFS 内存中

转载 作者:太空宇宙 更新时间:2023-11-04 14:34:32 27 4
gpt4 key购买 nike

我刚刚发现 VFS 作为访问 sftp 的一种方式。似乎可行,但所有示例均假设本地文件;相反,我的数据存储在内存中。我只看到一个方法 copyFrom(FileObject),没有接受流或缓冲区的重载...所以我尝试了 ram,因为它听起来大约是正确的(一些文档不会造成伤害,但我不能罚款任何)并且以下测试成功。复制到 sftp FileObject 也可以。

问题。它给出以下输出:信息:使用“C:\Users\myname\AppData\Local\Temp\vfs_cache”作为临时文件存储。

--它实际上是在写临时文件吗?这就是我试图避免的(由于运行这个东西的 Unix 服务器上潜在的权限/并发问题)。如果是这样,我如何完全在内存中完成它?

// try to copy a string from memory into a FileObject
public class VFSTest {

public static void main(String[] args) throws IOException {
String hello = "Hello, World!";
FileObject ram = VFS.getManager().resolveFile("ram:/tmp");
OutputStream os = ram.getContent().getOutputStream();
os.write(hello.getBytes());
ram.getContent().close();

FileObject local = VFS.getManager().resolveFile("C:\\foo.txt");
local.copyFrom(ram, Selectors.SELECT_SELF);
}
}

最佳答案

这是一个老问题,但我遇到了同样的问题,并且我能够在不假设本地文件的情况下解决它,因此这对于与 BW 遇到相同问题的人可能很有用。基本上,我们可以将输入流直接复制到远程文件的输出流中。

代码是这样的:

InputStream is = ... // you only need an input stream, no local file

DefaultFileSystemManager fsmanager = (DefaultFileSystemManager) VFS.getManager();

FileSystemOptions opts = new FileSystemOptions();
FtpFileSystemConfigBuilder.getInstance().setUserDirIsRoot(opts, true);
StaticUserAuthenticator auth = new StaticUserAuthenticator(host, username, password);

DefaultFileSystemConfigBuilder.getInstance().setUserAuthenticator(opts, auth);

String ftpurl = "ftp://" + host + ":" + port + "/" + folder + "/" + filename;
FileObject remoteFile = fsmanager.resolveFile(ftpurl, opts);

try (OutputStream ostream = remoteFile.getContent().getOutputStream()) {
// either copy input stream manually or with IOUtils.copy()
IOUtils.copy(is, ostream);
}

boolean success = remoteFile.exists();
long size = remoteFile.getContent().getSize();
System.out.println(success ? "Successful, copied " + size + " bytes" : "Failed");

关于java - Apache VFS 内存中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25753568/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com