标准代码如下:
此代码未使用缓冲流,哪天心情好补更个字节缓冲流 和字节缓冲流
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class ShuChu {
public static void main(String[] args) {
FileInputStream fi = null;//创建输入流,初始值因close()方法而赋值
FileOutputStream fo = null;//创建输出流,初始值因close()方法而赋值
try {//此try catch用于获取文件读取和输出时可能发生的异常
fi = new FileInputStream("D:\\星际牛仔/10.mp4");//给fi指定我的一个本机路径指向一个视频
fo = new FileOutputStream("D:\\02/星际牛仔.mp4", true);//给fo的输出制定一个我本机已经存在的路径并定义文件名
long l = System.currentTimeMillis();//此l用于获取文件开始读取之前的时间点
byte[] bytes = new byte[1024 * 12];//此bytes用于存储单次读取的数据,读取多少取决于数组定义的长度
int x;//用于获取单次实际获取的字节数,控制当最后一次读取存储结束输出时因此次数组新读取不满造成的部分重输出
while ((x = fi.read(bytes)) != -1) {//此行代码做了几件事:1.读取数据 2.存储数据于bytes 3.将此次读取多少字节数据存于x
fo.write(bytes, 0, x);//将此次bytes存取的x个字节数据写入目标路径目标文件
}//直到目标文件的数据全部读取存储输出完毕时跳出循环
long v = System.currentTimeMillis();//存储文件输出结束时的时间点
System.out.println(v - l);//二者作差得到文件操作的总时间
} catch (IOException e) {
e.printStackTrace();//抛出异常,可惜我目前没有机会运行这行代码
} finally {//无论上部代码是否执行或执行多少都需要进行输入和输出的close()操作
if (fi!=null){//防止空指针异常
try {
fi.close();//输入的释放操作
} catch (IOException e) {
e.printStackTrace();
}
}
if (fo!=null){//防止空指针异常
try {
fo.close();//输出的释放操作
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}