【问题标题】:Java File URI error?Java 文件 URI 错误?
【发布时间】:2010-04-06 20:28:19
【问题描述】:

我需要在线获取一个文件对象,我知道该文件位于: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)

为什么?如何解决?

弗兰克

【问题讨论】:

标签: java file uri


【解决方案1】:

我不确定 FileInputStream 是否专为通过 Internet 阅读而设计.. 试试new URL(File_Uri).openConnection().getInputStream()

【讨论】:

    【解决方案2】:

    不要为此目的使用 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 对象,而我从描述中理解的情况并非如此(如果它是一个序列化的对象,那么您的浏览器没有打开该文件)。

    【讨论】:

      【解决方案3】:

      我得到了启发,正确答案是:

      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()));
      }
      

      【讨论】:

      • 拥有巨大声望的人,告诉我这是如何工作的? (使用 ObjectInputStream)
      【解决方案4】:

      试试"file://nmjava.com/Dir_App_IDs/Dir_GlassPaneDemo/GlassPaneDemo_2010_04_06_15_00_SNGRGLJAMX"

      【讨论】:

      • 我试过了,得到这个错误:java.lang.IllegalArgumentException: URI has an authority component at java.io.File.(File.java:368)
      猜你喜欢
      • 1970-01-01
      • 2012-04-26
      • 2013-07-30
      • 2012-09-08
      • 1970-01-01
      • 2011-06-25
      • 2012-02-23
      • 2011-07-19
      • 2011-02-13
      相关资源
      最近更新 更多