我可以打开1.jpg
但无法打开2.jpg
public static void main(String[] args) throws Exception{
download(“ https://maint1.deeptel.com.cn/upload/M00/00/5B/ty_yLFyiuKqACaoNAAIRXTRqncE301.jpg”,“ 1.jpg”); download2(“ https://maint1.deeptel.com.cn/upload/M00/00/5B/ty_yLFyiuKqACaoNAAIRXTRqncE301.jpg”,“ 2.jpg”);
}
public static void download(String urlString, String filename) throws Exception {
URL url = null;
OutputStream os = null;
URLConnection con = null;
InputStream is = null;
try {
url = new URL(urlString);
con = url.openConnection();
con.setConnectTimeout(5 * 1000);
is = con.getInputStream();
byte[] bs = new byte[1024];
int len;
os = new FileOutputStream(filename);
while ((len = is.read(bs)) != -1) {
os.write(bs, 0, len);
}
} catch (IOException e1) {
e1.printStackTrace();
} finally {
try {
if (os != null)
os.close();
} catch (IOException e1) {
e1.printStackTrace();
}
try {
if (is != null)
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void download2(String url, String fileName) throws Exception {
CloseableHttpClient httpClient = null;
InputStream inputStream = null;
File file = null;
try {
httpClient = HttpClients.createDefault();
HttpGet method = new HttpGet(url);
HttpResponse result = httpClient.execute(method);
inputStream = result.getEntity().getContent();
BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
//得到图片的二进制数据,以二进制封装得到数据,具有通用性
byte[] data = readInputStream(bufferedInputStream);
//new一个文件对象用来保存图片,默认保存当前工程根目录
File imageFile = new File(fileName);
//创建输出流
FileOutputStream outStream = new FileOutputStream(imageFile);
//写入数据
outStream.write(data);
//关闭输出流
outStream.close();
} catch (IOException e) {
} finally {
try {
inputStream.close();
} catch (IOException e) {
}
try {
httpClient.close();
} catch (IOException e) {
}
}
}
public static byte[] readInputStream(InputStream inStream) throws Exception {
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
//创建一个Buffer字符串
byte[] buffer = new byte[1024];
//每次读取的字符串长度,如果为-1,代表全部读取完毕
int len = 0;
//使用一个输入流从buffer里把数据读取出来
while ((len = inStream.read(buffer)) != -1) {
//用输出流往buffer里写入数据,中间参数代表从哪个位置开始读,len代表读取的长度
outStream.write(buffer, 0, len);
}
//关闭输入流
inStream.close();
//把outStream里的数据写入内存
return outStream.toByteArray();
}