本帖最后由 狂飙的yellow.co 于 2013-6-1 19:30 编辑
我对于IO流复制文件,总结了四种方法
1.第一种复制方法,使用自定义的缓冲区- public static void copyfile_1() throws IOException{//抛出异常
- //其中file的 \\是转义字符
- FileInputStream in = new FileInputStream("E:\\yellowcong.txt");//输入流
- FileOutputStream out = new FileOutputStream("E:\\heima.txt");//输出流
-
- //自定义缓冲区
- byte [] buf = new byte[1024];
-
- int len = 0;//用于判断是否写入完成的标记
- //多次的重复读写数据
- while((len = in.read(buf))!= -1){//读取数据,写入缓冲区
- out.write(buf, 0, len); // 写出数据
- }
-
- //关闭资源
- out.close();
- in.close();
- }
复制代码 第二种方法 使用java提供的缓冲区,这种方法的效率高一点
’- public static void copyfile_2() throws IOException {
- // TODO Auto-generated method stub
- //读取数据的缓冲区
- BufferedInputStream in = new BufferedInputStream(new FileInputStream("E:\\yellowcong.txt"));
-
- //写数据的缓冲区
- BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream("E:\\heima.txt"));
-
- int ch = 0;//其中这个ch 不是用来标记的,而是来写的
- while((ch = in.read())!= -1){
- out.write(ch);
- }
-
-
- //关闭资源
- in.close();
- out.close();
- }
复制代码 第三种方法:使用 aviable() 获取数据的大小,然后定义和复制的文件一样大的缓冲区- public static void copyfile_3() throws IOException{//抛出异常
- //其中file的 \\是转义字符
- FileInputStream in = new FileInputStream("E:\\yellowcong.txt");//输入流
- FileOutputStream out = new FileOutputStream("E:\\heima.txt");//输出流
-
- //自定义缓冲区
- byte [] buf = new byte[in.available()];
-
- in.read(buf);
- out.write(buf);
- //关闭资源
- out.close();
- in.close();
- }
复制代码 第四中方法 不用缓冲区的方法- public static void copyfile_4() throws IOException{//抛出异常
- //其中file的 \\是转义字符
- FileInputStream in = new FileInputStream("E:\\yellowcong.txt");//输入流
- FileOutputStream out = new FileOutputStream("E:\\heima.txt");//输出流
-
- int ch = 0;//用于读写, 读一个写一个,速度是很慢
- //多次的重复读写数据
- while((ch = in.read())!= -1){//读取数据,写入缓冲区
- out.write(ch); // 写出数据
- }
-
- //关闭资源
- out.close();
- in.close();
- }
复制代码 |