到目前为止,这是我的代码:
public boolean descargarArchivo(String url, String outputDirectory) {
try {
File img = new File(outputDirectory);
URLConnection conn = new URL(url).openConnection();
conn.connect();
try (InputStream in = conn.getInputStream();
OutputStream out = new FileOutputStream(img)) {
int b = 0;
while (b != -1) {
b = in.read();
if (b != -1) {
out.write(b);
}
}
}
return true;
} catch (IOException ioe) {
ioe.printStackTrace();
}
return false;
}
此代码存在的问题是有时执行错误的图片下载。让我用一个例子来澄清这个想法:
虽然第一张图片是原始图片(并且输出文件应该是这样的),但第二张图片是图片的真实输出文件,由该代码执行,这显然是错误的(忽略分辨率,I& #39;我只是谈论这个"错误的像素")。有没有办法改善这个?我应该改变从网上下载图片的方式吗?
答案 0 :(得分:0)
这就是我从网址读取图片的方式:
try {
final InputStream inputStream = createInputStream(new URL(getImgUrl()));
try {
return ImageIO.read(inputStream);
} finally {
inputStream.close();
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (SocketTimeoutException e) {
//e.printStackTrace(); in case of error, will try again
} catch (IOException e) {
e.printStackTrace();
}
使用
protected InputStream createInputStream(URL url) throws IOException {
URLConnection con = url.openConnection();
con.setConnectTimeout(500);
con.setReadTimeout(200);
return con.getInputStream();
}