/ * 下载文件到本地 * * @param urlString * 被下载的文件地址 * @param filename * 本地文件名 * @param timeout * 超时时间毫秒 * @throws Exception * 各种异常 */ public static boolean download(String urlString, String filename,int timeout){ boolean ret = false; File file = new File(filename); try { if(file.exists()){ ret = true; }else{ // 构造URL URL url = new URL(urlString); // 打开连接 HttpURLConnection con = (HttpURLConnection )url.openConnection(); con.setConnectTimeout(timeout); con.setReadTimeout(timeout); con.connect(); int contentLength = con.getContentLength(); // 输入流 InputStream is = con.getInputStream(); // 1K的数据缓冲 byte[] bs = new byte[1024]; // 读取到的数据长度 int len; // 输出的文件流 File file2=new File(file.getParent()); file2.mkdirs(); if(file.isDirectory()){ }else{ file.createNewFile();//创建文件 } OutputStream os = new FileOutputStream(file); // 开始读取 while ((len = is.read(bs)) != -1) { os.write(bs, 0, len); } // 完毕,关闭所有链接 os.close(); is.close(); if(contentLength != file.length()){ file.delete(); ret = false; }else{ ret = true; } } } catch (IOException e) { file.delete(); ret = false; LOGGER.error("[VideoUtil:download]:\n" + " VIDEO URL:" + urlString + " \n NEW FILENAME:" + filename + " DOWNLOAD FAILED!! "); }finally { return ret; } } / * 断点续传 * @param urlString * @param filename * @param timeout * @return */ public static boolean resumeDownload(String urlString, String filename,int timeout) throws Exception{ boolean ret = false; File fileFinal = new File(filename); String tmpFileName = filename+".tmp"; File file = new File(tmpFileName); try { if(fileFinal.exists()){ ret = true; }else{ long contentStart = 0; File file2=new File(file.getParent()); if(file.exists()){ contentStart = file.length(); }else{ file2.mkdirs(); } // 构造URL URL url = new URL(urlString); // 打开连接 HttpURLConnection con = (HttpURLConnection )url.openConnection(); con.setConnectTimeout(timeout); con.setReadTimeout(timeout); //设置续传的点 if(contentStart>0){ con.setRequestProperty("RANGE","bytes="+contentStart+"-"); } con.connect(); int contentLength = con.getContentLength(); // 输入流 InputStream is = con.getInputStream(); // 100Kb的数据缓冲 byte[] bs = new byte[100*1024]; // 读取到的数据长度 int len; RandomAccessFile oSavedFile = new RandomAccessFile(tmpFileName,"rw"); oSavedFile.seek(contentStart); // 开始读取 while ((len = is.read(bs)) != -1) { oSavedFile.write(bs, 0, len); } // 完毕,关闭所有链接 oSavedFile.close(); is.close(); file.renameTo(fileFinal); ret = true; } } catch (IOException e) { file.delete(); ret = false; LOGGER.error("[VideoUtil:download]:\n" + " VIDEO URL:" + urlString + " \n NEW FILENAME:" + filename + " DOWNLOAD FAILED!! "); throw new Exception(e); }finally { return ret; } }
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/227049.html原文链接:https://javaforall.net
