Java 找不到协议';资源';在URL构造函数中
我实现了一个类来读取RSS 2.0和Atom 1.0提要。我想写一些单元测试来验证功能。下面是我的代码的提要阅读器部分:Java 找不到协议';资源';在URL构造函数中,java,url,junit,protocols,Java,Url,Junit,Protocols,我实现了一个类来读取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
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路径从资源加载。据我所知,资源似乎应该是一个有效的协议。有人知道我可能做错了什么,或者有其他方法吗?如果您想使用本地文件系统处理path,该类最适合此任务 可用于在文件系统中定位文件的对象。会的 通常表示依赖于系统的文件路径 您可以这样使用它:
Path path = FileSystems.getDefault().getPath("/resources/rss2-0.xml");
BufferedReader reader = Files.newBufferedReader(path, StandardCharsets.UTF_8);
如果你真的想处理URL,你要寻找的协议就是简单的“文件”。所以它应该是file:///rss2-0.xml
而不是resource:///rss2-0.xml
甚至更确切地说是文件:/resources/rss2-0.xml
请注意,在您的情况下,您确实迟早要处理这些问题,但是在处理本地测试时,使用Path类可以避免麻烦。如果你想要另一个选择,试试这个课程。由于URI是一个标识符(请参阅),它可以标识URL或路径,因此可以作为最终处理URL的生产代码和最适合使用Path类的测试代码之间的桥梁
例如:
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文档说,只有http、https、文件和jar“保证”存在于协议处理程序的搜索路径上。只有“可能”支持其他 看起来,如果您想要一个java发行版不支持的自定义处理程序,就必须创建一个