我在java中尝试这段代码:
try
{
String url = "http://url.com/file.ext";
InputStream myInputStream = getClass().getResourceAsStream(url);
ByteArrayOutputStream myByteArrayOutputStream = new ByteArrayOutputStream();
byte[] arrayOfByte = new byte[1024];
int i;
while ((i = myInputStream.read(arrayOfByte)) != -1)
{
myByteArrayOutputStream.write(arrayOfByte, 0, i);
}
}
catch (Exception e)
{
System.err.println(e);
System.err.println(e.getMessage());
System.err.println(e.getLocalizedMessage());
System.err.println(e.getCause());
System.err.println(Arrays.toString(e.getStackTrace()));
e.printStackTrace();
}
它编译得很好,但它抛出异常,这是控制台输出:
java.lang.NullPointerException
null
null
null
[myclass.init(myclass.java:32), sun.applet.AppletPanel.run(Unknown Source), java.lang.Thread.run(Unknown Source)]
java.lang.NullPointerException
at myclass.init(myclass.java:32) <- Line 32 is "while ((i = myInputStream....."
at sun.applet.AppletPanel.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
可能导致异常的原因是什么?
答案 0 :(得分:3)
InputStream
显然为空。它是唯一在该行被取消引用的对象。
getResourceAsStream()
使用类加载器在CLASSPATH中搜索命名资源。您提供的URL保证不在您的CLASSPATH中,因此这里没有任何谜。
答案 1 :(得分:3)
实际上再看一下,你的InputStream myInputStream = getClass().getResourceAsStream(url);
没有意义,而是使用
Url url = new Url("http://url.com/file.ext");
UrlConnection urlCon = url.openConnection();
InputStream input = urlCon.getInputStream();
那应该正确抓取字节