gpt4 book ai didi

java - "URI is not hierarchical"+ 私钥

转载 作者:可可西里 更新时间:2023-11-01 11:28:57 29 4
gpt4 key购买 nike

我刚开始在我的 Java 程序(为 Windows 7 制作)中使用 Jsch 进行 SSH 连接。我遇到了将私钥合并到我的程序中的问题。我使用以下代码:

URL keyFileURL = Main.class.getResource("auth/public_key_1");
URI keyFileURI = keyFileURL.toURI();
jsch.addIdentity(new File(keyFileURI).getAbsolutePath());

其中“auth”是同一包中的文件夹。好消息是,在 Eclipse 中运行时一切正常,但在作为 jar 运行时却失败了。给出的错误是:“IllegalArgumentException:URI 不是分层的”。

我知道这个错误与路径名和使用 URI 作为文件有关,但我不知道如何在不从外部导入它的情况下引用 jar 文件中的资源(即从与 jar 相同的文件夹中的文件)和仍然与 Jsch 兼容。

有人可以帮助我编写代码以适本地引用程序中的资源并仍然让 Jsch 接受它作为 key 吗。

预先感谢您提供的所有帮助。

更新:

我尝试了@bmargulies 推荐的代码:

    String authfile;

URL resUrl = Resources.getResource(Main.class, "auth/public_key_1");
File tempFile = File.createTempFile("key", ".key");
ByteSink sink = Files.asByteSink(tempFile);
try (OutputStream os = sink.openStream()) {
Resources.copy(resUrl, os);
authfile = os.toString();
jsch.addIdentity(authfile);
}

但它给我错误:“java.io.FileOutputStream(系统找不到指定的文件)”。有什么我应该在代码或任何其他建议中修复的吗?

最佳答案

这不是您阅读资源的方式。您无法获取资源的 File,只能获取流。资源的 URL 与文件不对应。

如果 jsch 可以处理流,则将 getResourceAsStream 的结果传递给它。

如果 jsch 可以处理字节数组,则将读取流的结果传递给字节数组。

如果它必须有一个文件,创建一个临时文件。

在第三种情况下,我会合并 Guava 并编写如下代码:

URL resUrl = Resources.getResource(Main.class, "auth/public_key1");
File tempFile = File.createTempFile("key", ".key");
ByteSink sink = Files.asByteSink(tempFile);
try (OutputStream os = sink.openStream()) {
Resources.copy(resUrl, os);
}

并将文件的路径传递给jsch。

关于java - "URI is not hierarchical"+ 私钥,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25837815/

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