转载自https://blog.csdn.net/vison155142/article/details/76037647
1.首推一种方法,封装好的FileUtils,简单一句话就搞定
- /**
- * 下载文件---返回下载后的文件存储路径
- *
- * @param url 文件地址
- * @param dir 存储目录
- * @param fileName 存储文件名
- * @return
- */
- public static void downloadHttpUrl(String url, String dir, String fileName) {
- try {
- URL httpurl = new URL(url);
- File dirfile = new File(dir);
- if (!dirfile.exists()) {
- dirfile.mkdirs();
- }
- FileUtils.copyURLToFile(httpurl, new File(dir+fileName));
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
2.第二种方法,常规写法,不多说
- /**
- * 从网络Url中下载文件
- *
- * @param urlStr
- * @param fileName
- * @param savePath
- * @throws IOException
- */
- public static String downLoadFromUrl(String urlStr, String fileName, String savePath) {
- try {
- URL url = new URL(urlStr);
- HttpURLConnection conn = (HttpURLConnection) url.openConnection();
- // 设置超时间为3秒
- conn.setConnectTimeout(3 * 1000);
- // 防止屏蔽程序抓取而返回403错误
- conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
- // 得到输入流
- InputStream inputStream = conn.getInputStream();
- // 获取自己数组
- byte[] getData = readInputStream(inputStream);
- // 文件保存位置
- File saveDir = new File(savePath);
- if (!saveDir.exists()) {
- saveDir.mkdir();
- }
- File file = new File(saveDir + File.separator + fileName);
- FileOutputStream fos = new FileOutputStream(file);
- fos.write(getData);
- if (fos != null) {
- fos.close();
- }
- if (inputStream != null) {
- inputStream.close();
- }
- // System.out.println("info:"+url+" download success");
- return saveDir + File.separator + fileName;
- } catch (Exception e) {
- e.printStackTrace();
- }
- return "";
- }
- /**
- * 从输入流中获取字节数组
- *
- * @param inputStream
- * @return
- * @throws IOException
- */
- public static byte[] readInputStream(InputStream inputStream) throws IOException {
- byte[] buffer = new byte[1024];
- int len = 0;
- ByteArrayOutputStream bos = new ByteArrayOutputStream();
- while ((len = inputStream.read(buffer)) != -1) {
- bos.write(buffer, 0, len);
- }
- bos.close();
- return bos.toByteArray();
- }