2010-04-06 3 views
0

мне нужно получить объект файла в Интернете, и я знаю, что файл находится по адресу: http://nmjava.com/Dir_App_IDs/Dir_GlassPaneDemo/GlassPaneDemo_2010_04_06_15_00_SNGRGLJAMXОшибка URI файла Java?

Если я вставьте его в 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

+1

не связан с вопросом, но: читать о Java Naming конвенции http://java.sun.com/docs/codeconv/html/CodeConvTOC.doc .html, ваш код написан не в стиле java. – Roman

ответ

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

3

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

+0

Довольно близко, не совсем, спасибо, я понял. Вдохновляю! – Frank

+0

Счастливые вдохновить. –

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

Смежные вопросы