通过java来模拟windows的拷贝文件功能
注意:
1.缓冲流会比普通流传输更快
2.对于写入流,在写完之后,必须关闭流(.close)或者刷新流(.flush),不然是空文件.
3.字符流,只能拷贝文本类型的文件.并且高效(缓冲)字符流可以有独特的方法,一行一行的读取数据
4.字节流可以读取任何文件,在java中万物皆字节.
下面我们通过idea来实现以下,高效字节流copy一个MP3类型的文件,并计算所用的时间
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class BufferedInputStreamTest {
public static void main(String[] args) {
long start = System.currentTimeMillis();
try(BufferedInputStream bis = new BufferedInputStream(new FileInputStream("H:\\酷狗音乐\\雨宗林 - 别把疼你的人弄丢了.mp3"));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("H:\\aaa\\雨宗林 - 别把疼你的人弄丢了.mp3"))){
byte [] arr = new byte[1024];
int len;
while((len = bis.read(arr)) != -1){
bos.write(arr, 0 ,len);
}
//bos.close();//这个地方在jdk7之后,我们采取trycatch来处理IO异常,这里可以不用写,自动关闭流.如果采用抛的方式处理异常,就必须关闭流
//bis.close();
} catch ( IOException e) {
e.printStackTrace();
}
long end = System.currentTimeMillis();
System.out.println(end-start);
}
}
注意,上面代码我们用的是缓冲字节流来进行copy的.对于非文本类型文件,切记不要用字符流来进行拷贝,不然拷贝出来的文件打开是乱码,并且文件会变大很多
规范的关闭流遵从先创建的后关闭,的原则.
|
|