需求:通过http,下载网络视频到u盘中或磁盘中
public static boolean copyDvrOrRecordFile(String filePath, String destPath, String fileName) {
//网络连接
HttpURLConnection connection = null;
//包装流,使用装饰器模式,干活的还是传进来的对应的流
//缓冲输入流,从外部资源比如网络,读取数据到内存中
BufferedInputStream bufferedInputStream = null;
//缓冲输出流,将内存中的数据,输出到对应的外部存储,比如u盘
BufferedOutputStream bufferedOutputStream = null;
try {
URL url = new URL(filePath);
connection = (HttpURLConnection) url.openConnection();
connection.setConnectTimeout(Constants.GALLERY_NETWORK_REQUEST_TIME_OUT);
InputStream inputStream = connection.getInputStream();
//目标路径,如果不存在就创建对应的目录
File fileDir = new File(destPath);
if (!fileDir.exists()) {
fileDir.mkdir();
}
//目标文件,将下载的数据存入目标设备,以及文件名
File destFile = new File(fileDir, fileName);
bufferedInputStream = new BufferedInputStream(inputStream);
FileOutputStream fileOutputStream = new FileOutputStream(destFile);
bufferedOutputStream = new BufferedOutputStream(fileOutputStream);
byte[] buffer = new byte[Constants.GALLERY_NETWORK_SIZE];
int len;
//使用缓冲输出流,不停地写入字节
while ((len = bufferedInputStream.read()) != -1) {
bufferedOutputStream.write(buffer, 0, len);
}
//缓冲输出流刷新
bufferedOutputStream.flush();
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
} finally {
//关闭相关的资源文件
try {
if (connection != null) {
connection.disconnect();
}
if (bufferedInputStream != null) {
bufferedInputStream.close();
}
if (bufferedOutputStream != null) {
bufferedOutputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
调用
实现效果
主要是为了熟悉基本的io的使用。