首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法在URL构造函数中找到协议“资源”

无法在URL构造函数中找到协议“资源”
EN

Stack Overflow用户
提问于 2014-08-18 19:16:01
回答 2查看 636关注 0票数 2

我实现了一个从RSS2.0和Atom 1.0提要中读取的类。为了验证功能,我想编写一些单元测试。下面是我代码的提要读取器部分:

代码语言:javascript
运行
复制
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 :resource

这是我第一次使用URL路径从资源加载。据我所知,资源似乎应该是一个有效的协议。有人知道我可能做错了什么或其他方法来做这件事吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-18 19:17:50

如果要使用本地文件系统处理路径,则路径类最适合此任务。

可用于在文件系统中定位文件的对象。它通常表示系统相关的文件路径。

您可以这样使用它:

代码语言:javascript
运行
复制
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,甚至file:/resources/rss2-0.xml

请注意,在您的情况下,您迟早要处理URL,但是在处理本地测试时,使用Path类可以省去麻烦。如果您想要另一种选择,请尝试URI类。由于URI是一个标识符(请参阅URI和URL的区别),它可以识别URL或路径,它可以充当生产代码(最终将处理URL)与测试代码之间的桥梁,在这两者之间可以最好地使用Path类。

例如:

代码语言:javascript
运行
复制
public interface FeedReader {
    String readFeed(final URI uri);
}

以及两个实现,一个用于本地测试:

代码语言:javascript
运行
复制
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
    }
}

一份用于生产代码:

代码语言:javascript
运行
复制
public class WebFeedReader implements FeedReader {

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

Stack Overflow用户

发布于 2014-08-18 19:25:30

java文档说只有http、https、file和jar才能“保证”存在于协议处理程序的搜索路径上。其他只有“可能”才能得到支持。

http://docs.oracle.com/javase/8/docs/api/java/net/URL.html#URL-java.lang.String-java.lang.String-int-java.lang.String-

看起来,如果您想要java发行版中不支持的自定义处理程序,则必须创建一个处理程序。

http://mjremijan.blogspot.com/2012/02/create-your-own-java-url-handlers.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25370483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档