JAVA url = new URL()malformedURLexception

时间:2015-06-01 20:31:50

标签: java url malformedurlexception

我正在尝试构建一个从网站收集HTML源代码的抓取工具,我在.csv文件中。 每当我将链接放在

中时,一切似乎都能正常工作
url = new URL ("http://example.com")

但每当我尝试将链接放在一个变量中时("文本"在本例中)我收到一个错误,告诉我有一个malformedURLException。

这是我的代码:

String text ="http://stackoverflow.com/questions/9827143/continuing-execution-after-an-exception-is-thrown-in-java";

// get the sourcecode of the link you just grabbed
url = new URL(text);
PrintWriter writer = new PrintWriter("sourcecode.txt", "UTF-8");

3 个答案:

答案 0 :(得分:2)

您的字符串中隐藏了字符。您可能从Word文件或在Windows中转换的文本文件中复制了URL。一开始就有一个BOM标记。当我这样做时:

System.out.println( Arrays.toString(text.getBytes(StandardCharsets.UTF_16BE)));

这是我得到的输出:

[-2, -1, 0, 104, 0, 116, 0, 116, 0, 112, 0, 58, 0, 47, 0, 47, 0, 115, 0, 116, 0, 97, 0, 99, 0, 107, 0, 111, 0, 118, 0, 101, 0, 114, 0, 102, 0, 108, 0, 111, 0, 119, 0, 46, 0, 99, 0, 111, 0, 109, 0, 47, 0, 113, 0, 117, 0, 101, 0, 115, 0, 116, 0, 105, 0, 111, 0, 110, 0, 115, 0, 47, 0, 57, 0, 56, 0, 50, 0, 55, 0, 49, 0, 52, 0, 51, 0, 47, 0, 99, 0, 111, 0, 110, 0, 116, 0, 105, 0, 110, 0, 117, 0, 105, 0, 110, 0, 103, 0, 45, 0, 101, 0, 120, 0, 101, 0, 99, 0, 117, 0, 116, 0, 105, 0, 111, 0, 110, 0, 45, 0, 97, 0, 102, 0, 116, 0, 101, 0, 114, 0, 45, 0, 97, 0, 110, 0, 45, 0, 101, 0, 120, 0, 99, 0, 101, 0, 112, 0, 116, 0, 105, 0, 111, 0, 110, 0, 45, 0, 105, 0, 115, 0, 45, 0, 116, 0, 104, 0, 114, 0, 111, 0, 119, 0, 110, 0, 45, 0, 105, 0, 110, 0, 45, 0, 106, 0, 97, 0, 118, 0, 97]

前两个字节是unicode BOM字符。从哪里拿到你的琴弦要小心。如果从Excel导出CSV,并且该文件仅包含URL,请尝试将其导出为仅ASCII。

答案 1 :(得分:0)

双引号存在问题。

我粘贴了你的文字"进入Eclipse并尝试保存,它向我显示在你的"文本的开头有一个无效的字符" string,因为有一个Cp1252编码字符。

我删除了你的第一个双引号,并重新输入了它。然后我跑了

String text = "http://stackoverflow.com/questions/9827143/continuing-execution-after-an-exception-is-thrown-in-java";

try {
    URL url = new URL(text);
    PrintWriter writer = new PrintWriter("sourcecode.txt", "UTF-8");
    System.out.println("all good");
} catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (UnsupportedEncodingException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (MalformedURLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

它有效。

答案 2 :(得分:0)

你的文本变量中有一个特殊的字符。刚刚在浏览器中尝试过您的链接,因此无效。

复制以下内容并重试:

​String text ="http://stackoverflow.com/questions/9827143/continuing-execution-after-an-exception-is-thrown-in-java";