2

.csv ファイルにある Web サイトから HTML ソースコードを収集するクローラーを構築しようとしていました。リンクを配置するたびに、すべてが正常に機能しているようです

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");
4

3 に答える 3

2

文字列に隠し文字があります。Windows で変換された Word ファイルまたはテキスト ファイルから 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]

最初の 2 バイトは、Unicode BOM 文字です。弦をどこから入手するかに注意してください。CSV を Excel からエクスポートし、ファイルに URL のみが含まれている場合は、ASCII のみとしてエクスポートしてみてください。

于 2015-06-01T20:43:42.803 に答える
0

二重引用符に問題があります。

「テキスト」行を Eclipse に貼り付けて保存しようとしたところ、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();
}

そして、それはうまくいきました。

于 2015-06-01T20:40:09.537 に答える
0

テキスト変数に特別な文字があります。ブラウザでリンクを試してみましたが、これが原因で機能しませんでした。

以下をコピーして、再試行してください。

​String text ="http://stackoverflow.com/questions/9827143/continuing-execution-after-an-exception-is-thrown-in-java";
于 2015-06-01T20:43:49.787 に答える