![](/img/trans.png)
[英]error - java.lang.IllegalArgumentException: URI scheme is not “file”?
[英]Java File URI error?
我需要在線獲取文件對象,而且我知道文件位於: http : //nmjava.com/Dir_App_IDs/Dir_GlassPaneDemo/GlassPaneDemo_2010_04_06_15_00_SNGRGLJAMX
如果將其粘貼到瀏覽器的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)
為什么呢 如何解決?
坦率
我不確定FileInputStream是否設計用於通過Internet讀取。嘗試new URL(File_Uri).openConnection().getInputStream()
不要為此目的使用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);
}
}
您還可以使用對象流 (例如ObjectInputStream)在代碼中進行操作。 但是該流僅應用於讀取序列化的Java對象,而從我從描述中了解到的情況並非如此(如果它將是序列化的對象,則您的瀏覽器尚未打開該文件)。
我受到啟發,正確的答案是:
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()));
}
嘗試"file://nmjava.com/Dir_App_IDs/Dir_GlassPaneDemo/GlassPaneDemo_2010_04_06_15_00_SNGRGLJAMX"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.