Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 找不到协议';资源';在URL构造函数中_Java_Url_Junit_Protocols - Fatal编程技术网

Java 找不到协议';资源';在URL构造函数中

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

我实现了一个类来读取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路径从资源加载。据我所知,资源似乎应该是一个有效的协议。有人知道我可能做错了什么,或者有其他方法吗?

如果您想使用本地文件系统处理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发行版不支持的自定义处理程序,就必须创建一个