Ошибка URI файла Java? - PullRequest
       6

Ошибка URI файла Java?

0 голосов
/ 07 апреля 2010

Мне нужно получить объект файла в сети, и я знаю, что файл находится по адресу: 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)

Почему? Как это исправить?

Frank

Ответы [ 4 ]

3 голосов
/ 07 апреля 2010

Я не уверен, что FileInputStream предназначен для чтения через Интернет .. попробуйте new URL(File_Uri).openConnection().getInputStream()

3 голосов
/ 07 апреля 2010

Не используйте 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, и это не так, как я понимаю из описания (если это будет сериализованный объект, то ваш браузер не открыл этот файл).

1 голос
/ 07 апреля 2010

Меня вдохновили, правильный ответ:

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 голосов
/ 07 апреля 2010

Попробуйте "file://nmjava.com/Dir_App_IDs/Dir_GlassPaneDemo/GlassPaneDemo_2010_04_06_15_00_SNGRGLJAMX"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...