我目前的代码是:
try {
inputStream is = (new URL(urlpath).openStream());
ByteArrayOutputStream os = new ByteArrayOutputStream();
for (int len; (len = is.read(data)) != -1;) {
os.write(data, 0, len);
}
os.flush();
data = os.toByteArray();
} catch (Exception e) {
e.printStackTrace();
}
但is.read(data)
始终返回-1
。我不明白为什么它不起作用。我在其他地方使用相同的代码,它正在工作,但在这个应用程序中,此代码不起作用。 url路径应该有什么问题?
答案 0 :(得分:1)
您说此代码旨在在服务器上运行,但它可以在您的本地环境中运行。它无法工作的原因是因为服务器也提供了localhost
地址,并且该资源仅在您的本地环境中。将localhost
更改为资源所在主机的IP地址,您的代码将起作用。
http://localhost...
< - 将告诉代码在运行代码的同一台计算机上查找,这就是服务器无法找到它的原因。
将localhost
更改为运行Web应用程序的资源的IP地址(xxx.xxx.xxx.xxx)。
因此,如果Web应用程序托管在192.168.0.100
上,那么您将执行以下操作:
http://192.168.0.100:8080/School/abc.jsp?selectedLetter=d~2015012200001~NOTICE~%27%27
请注意,由于服务器需要访问外部资源以与Web应用程序通信防火墙规则也将发挥作用(您需要确保任何防火墙都不阻止Web应用程序运行的主机上的端口8080上)。
答案 1 :(得分:0)
如果没有更多数据要读取,InputStream将返回-1。
请参阅 http://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html#read(byte[])了解更多详情。
试试这个
InputStream is = url.openConnection().getInputStream();
BufferedReader reader = new BufferedReader( new InputStreamReader( is ) );
String line = null;
while( ( line = reader.readLine() ) != null ) {
System.out.println(line);
}
reader.close();