java保存视频到本地

/**
	 * 下载视频
	 * @param videoUrl 实际视频地址
	 * @param downloadPath  文件下载地址
	 * @param fileName  文件名
	 * @param SuffixName  后缀名
	 */
	public static void downVideo(String videoUrl, String downloadPath,String fileName, String SuffixName) {
		HttpURLConnection connection = null;
		InputStream inputStream = null;
		RandomAccessFile randomAccessFile = null;

		//路径名加上文件名加上后缀名 = 整个文件下载路径
		String fullPathName = downloadPath+fileName+"."+SuffixName;

		try {
			// 1.获取连接对象
			URL url = new URL(videoUrl);
			// 获取链接对象,就是靠这个对象来获取流
			connection = (HttpURLConnection) url.openConnection();
			// Range代表读取的范围,bytes=0-代表从0字节到最大字节,意味着读取所有资源
			connection.setRequestProperty("Range", "bytes=0-");
			// 与网页建立链接,链接成功后就可以获得流;
			connection.connect();
			// 如果建立链接返回的相应代码是200到300间就为成功,否则链接失败,结束函数
			if (connection.getResponseCode() / 100 != 2) {
				System.out.println("连接失败...");
				return;
			}
			// 2.获取连接对象的流
			inputStream = connection.getInputStream();
			// 已下载的大小 下载进度
			int downloaded = 0;
			// 总文件的大小
			int fileSize = connection.getContentLength();
			// 3.把资源写入文件
			randomAccessFile = new RandomAccessFile(fullPathName, "rw");
			while (downloaded < fileSize) {
				// 3.1设置缓存流的大小
				//判断当前剩余的下载大小是否大于缓存之,如果不大于就把缓存的大小设为剩余的。
				byte[] buffer = null;
				if (fileSize - downloaded >= 1000000) {
					buffer = new byte[1000000];
				} else {
					buffer = new byte[fileSize - downloaded];
				}
				// 3.2把每一次缓存的数据写入文件
				int read = -1;
				int currentDownload = 0;
				long startTime = System.currentTimeMillis();
				// 这段代码是按照缓存的大小,读写该大小的字节。然后循环依次写入缓存的大小(用让硬件频繁的写入,可以提高效率和保护硬盘)
				while (currentDownload < buffer.length) {
					read = inputStream.read();
					buffer[currentDownload++] = (byte) read;
				}
				long endTime = System.currentTimeMillis();
				double speed = 0.0; //下载速度
				if (endTime - startTime > 0) {
					speed = currentDownload / 1024.0 / ((double) (endTime - startTime) / 1000);
				}
				randomAccessFile.write(buffer);
				downloaded += currentDownload;
				randomAccessFile.seek(downloaded);
				System.out.printf(fullPathName+"下载了进度:%.2f%%,下载速度:%.1fkb/s(%.1fM/s)%n", downloaded * 1.0 / fileSize * 10000 / 100,
						speed, speed / 1000);
			}

		} catch (MalformedURLException e) {// 具体的异常放到前面
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				//关闭资源、连接
				connection.disconnect();
				inputStream.close();
				randomAccessFile.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

 

 原文地址:https://cloud.tencent.com/developer/article/1455706


版权声明:本文为fanhuiixa原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。