簡體   English   中英

Java文件URI錯誤?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM