我正在尝试构建一个从网站收集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");
答案 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";