2014-06-11 61 views
-3

我想讀取一個URL,然後將其轉換爲字符串並將內容寫入文本文件,但在編譯代碼時出現以下異常。這裏是我的代碼和我的例外:閱讀URL時沒有協議異常

import java.io.*; 
import java.net.URL; 
import java.net.URLConnection; 

public class Main { 
public static String url = "google.com"; 
public static String fileName= null; 
public static String fileConttent ="Something"; 

public static void main(String[] args) throws Exception { 
     getText(new String(url)); 
} 

public static void getText(String url) throws Exception { 
    URL website = new URL("url\n" + 
      " public static void main(String[] args) throws Exception {\n" + 
      "   getText(new String(url));\n" + 
      " }\n" + 
      "\n" + 
      " public static void getText(String url) throws Exception {\n" + 
      "  URL website = new URL(\"url"); 
    URLConnection connection = website.openConnection(); 
    BufferedReader in = new BufferedReader(
      new InputStreamReader(
        connection.getInputStream())); 

    StringBuilder response = new StringBuilder(); 
    String inputLine; 

    while ((inputLine = in.readLine()) != null) 
     response.append(inputLine); 

    in.close(); 

    String toBeWritten = response.toString(); 
    System.out.println(toBeWritten); 
} 




public static void createFile(String fileName,String fileContent){ 
    Writer writer = null; 

    try { 
     writer = new BufferedWriter(new OutputStreamWriter(
       new FileOutputStream("C:\\Users\\Dell\\Documents\\t"+"fileName"), "utf-8")); 
     writer.write(fileContent); 
    } catch (IOException ex) { 
     // report 
    } finally { 
     try {writer.close();} catch (Exception ex) {} 
    } 

} 



} 

這是我的例外:

Exception in thread "main" java.net.MalformedURLException: no protocol: url 
at java.net.URL.<init>(URL.java:583) 
at java.net.URL.<init>(URL.java:480) 
at java.net.URL.<init>(URL.java:429) 
at Main.getText(Main.java:15) 
at Main.main(Main.java:11) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:601) 
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120) 

過程與退出代碼完成1

應該做些什麼來解決這個問題?提前感謝所有答案。

更新

非常感謝你的回答。我做了你所說的,但我仍然得到同樣的錯誤。

Exception in thread "main" java.net.MalformedURLException: no protocol: url 
public static void main(String[] args) throws Exception { 
     getText(new String(url)); 
} 

public static void getText(String url) throws Exception { 
    URL website = new URL("url 
at java.net.URL.<init>(URL.java:583) 
at java.net.URL.<init>(URL.java:480) 
at java.net.URL.<init>(URL.java:429) 
at Main.getText(Main.java:15) 
at Main.main(Main.java:11) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:601) 
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120) 

過程完成,退出代碼爲1

+0

問題已解決謝謝 –

+0

這真的學會閱讀堆棧跟蹤很好的做法。編譯器通常會告訴你代碼失敗(或接近它)的行號。 –

+1

@Israel如果你已經解決了這個問題,你能發表一個答案來解釋解決方案是什麼嗎? – Zyerah

回答

0

您需要的協議添加到您的網址:

public static String url = "http://google.com"; 

而且你必須chnage你的代碼(以往的結果應該是什麼):

URL website = new URL("url\n" + 
      " public static void main(String[] args) throws Exception {\n" + 
      "   getText(new String(url));\n" + 
      " }\n" + 
      "\n" + 
      " public static void getText(String url) throws Exception {\n" + 
      "  URL website = new URL(\"url"); 

URL website = new URL(url); 
+0

@IsraelCohen我改變了我的答案。 – Jens

+0

問題出在這部分: –

+0

「url \ n」+ 「public static void main(String [] args)throws Exception {\ n」+ 「getText(new String(url)); \ n」+ 「} \ n」+ 「\ n」+ 「public static void getText(String url)throws Exception {\ n」+ 「URL website = new URL(\」url「); –

2

public static String url = "google.com";

這是一個域,而不是一個URL(或命名文件的相對URL「google.com」,但我們不要去那裏)。網址具有協議,例如HTTP。

0

你的代碼更改爲:

import java.io.BufferedReader; 
import java.io.InputStreamReader; 
import java.net.URL; 
import java.net.URLConnection; 

public class Main { 
public static String url = "https://www.google.com"; 
public static String fileName = null; 
public static String fileConttent = "Something"; 

public static void main(String[] args) throws Exception { 
    getText(new String(url)); 
} 

public static void getText(String url) throws Exception { 
    URL website = new URL(url); 
    URLConnection connection = website.openConnection(); 
    BufferedReader in = new BufferedReader(new InputStreamReader(
    connection.getInputStream())); 

    StringBuilder response = new StringBuilder(); 
    String inputLine; 

    while ((inputLine = in.readLine()) != null) 
    response.append(inputLine); 

    in.close(); 

    String toBeWritten = response.toString(); 
    System.out.println(toBeWritten); 
} 
}