gpt4 book ai didi

java - 在 URL 构造函数中找不到协议(protocol) 'resource'

转载 作者:行者123 更新时间:2023-11-30 08:21:13 25 4
gpt4 key购买 nike

我已经实现了一个类来读取 RSS 2.0 和 Atom 1.0 提要。我想写一些单元测试来验证功能。这是我的代码的提要阅读器部分:

private String readFeed(final String url) throws IOException
{
final StringBuilder builder = new StringBuilder();
final URL feedUrl = new URL(url);
final BufferedReader in = new BufferedReader(
new InputStreamReader(feedUrl.openStream()));

String input;
while ((input = in.readLine()) != null)
{
builder.append(input);
}
in.close();

return builder.toString();
}

经过一些研究,我认为最好的测试方法是在我的项目资源目录中有一个示例提要作为 XML 文件。

我创建了一个示例文件“resources/rss2-0.xml”

我将以下值发送到 readFeed 函数“resource:///rss2-0.xml”,我不断收到 java.net.MalformedURLException: unknown protocol: resource

这是我第一次使用 URL 路径从资源加载。据我所知,资源似乎应该是一个有效的协议(protocol)。任何人都知道我可能做错了什么或有其他方法可以解决这个问题吗?

最佳答案

如果您想使用本地文件系统处理路径,Path类最适合这项任务。

An object that may be used to locate a file in a file system. It will typically represent a system dependent file path.

你可以像这样使用它:

Path path = FileSystems.getDefault().getPath("/resources/rss2-0.xml");
BufferedReader reader = Files.newBufferedReader(path, StandardCharsets.UTF_8);

如果您真的想处理 URL,您正在寻找的协议(protocol)只是"file"。所以它将是 file:///rss2-0.xml 而不是 resource:///rss2-0.xml 甚至是 file:/resources/rss2-0.xml 准确地说。

请注意,在您的情况下,您确实需要处理 URLs迟早,但是在进行本地测试时,使用 Path 类将为您省去麻烦。如果您想要其他选择,请尝试 URI类(class)。由于 URI 是一个标识符(请参阅 difference between URI and URL),它可以识别 URL 或路径,并且可以充当最终处理 URL 的生产代码和测试代码之间的桥梁,其中路径类最好使用。

例如:

public interface FeedReader {
String readFeed(final URI uri);
}

还有 2 个实现,一个用于本地测试:

public class LocalFeedReader implements FeedReader {

@Override
public String readFeed(final URI uri) {
// URI -> Path
// then dealing with Path to target local rss2-0.xml file
}
}

还有一个用于生产代码:

public class WebFeedReader implements FeedReader {

@Override
public String readFeed(final URI uri) {
// URI -> URL
// then dealing with URL to target real resources
}
}

关于java - 在 URL 构造函数中找不到协议(protocol) 'resource',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25370483/

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