2010-04-06 86 views
0

我需要在網上一個文件對象,我知道該文件位於:http://nmjava.com/Dir_App_IDs/Dir_GlassPaneDemo/GlassPaneDemo_2010_04_06_15_00_SNGRGLJAMXJava文件URI錯誤?

如果我把它貼到我的瀏覽器的URL,我就可以下載這個文件,現在我想與Java得到它,我的代碼看起來是這樣的:

String File_Url="http://nmjava.com/Dir_App_IDs/Dir_GlassPaneDemo/GlassPaneDemo_2010_04_06_15_00_SNGRGLJAMX"; 
Object myObject=Get_Online_File(new URI(File_Url)); 

Object Get_Online_File(URI File_Uri) throws IOException 
{ 
    return readObject(new ObjectInputStream(new FileInputStream(new File(File_Uri)))); 
} 

public static synchronized Object readObject(ObjectInput in) throws IOException 
{ 
    Object o; 
    ...... 
    return o; 
} 

,但我得到了以下錯誤消息:

java.lang.IllegalArgumentException: URI scheme is not "file" 
     at java.io.File.<init>(File.java:366) 

爲什麼?如何解決它?

弗蘭克

+1

不相關的問題,但:閱讀關於Java命名約定http://java.sun.com/docs/codeconv/html/CodeConvTOC.doc .html,你的代碼不是用java風格編寫的。 – Roman 2010-04-06 20:30:54

回答

0

嘗試"file://nmjava.com/Dir_App_IDs/Dir_GlassPaneDemo/GlassPaneDemo_2010_04_06_15_00_SNGRGLJAMX"

+0

我試過了,得到這個錯誤: java.lang.IllegalArgumentException:URI在java.io.File中有一個權限組件 。 (File.java:368) – Frank 2010-04-06 20:37:17

3

我不知道的FileInputStream是專爲閱讀在互聯網上..嘗試new URL(File_Uri).openConnection().getInputStream()

+0

非常接近,不完全謝謝,我明白了。鼓舞人心的! – Frank 2010-04-06 20:51:07

+0

高興啓發。 – 2010-04-06 20:53:43

3

不要使用的FileInputStream用於這一目的。創建URL,然後獲取輸入流並從中讀取數據。

URL url = new URL (fileUrl); 
InputStream inputStream = url.openStream(); 
readData (inputStream); 

讀取數據,我建議你使用Commons IO庫(尤其是如果有2米或更多的地方,你有流工作,這可以節省您的時間,使你的代碼更具表現力):

private byte[] readData (InputStream in) { 
    try { 
     return IOUtils.toByteArray (in); 
    } finally { 
     IOUtils.closeQuietly(in); 
    } 
} 

您也可以在您的代碼中使用Object streams(如ObjectInputStream)。但是,該流應該只用於讀取序列化的java對象,並不是我所理解的描述(如果它是一個序列化對象,那麼您的瀏覽器還沒有打開該文件)。

1

我得到了啓發,正確的答案是:

Object myObject=Get_Online_File(new URL(File_Url)); 

Object Get_Online_File(URL File_Url) throws IOException 
{ 
    return readObject(new ObjectInputStream(File_Url.openConnection().getInputStream())); 
    // or readObject(new ObjectInputStream(File_Url.openStream())); 
} 
+0

代表巨大的代表,告訴我這個工作怎麼樣? (使用ObjectInputStream) – Roman 2010-04-06 20:57:45