A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 郭孟涛 于 2013-4-3 15:50 编辑

用FileReader和FileWriter复制毕老师的avi视频文件打不开?复制后也比源文件小?
  1. import java.io.*;
  2. class CopyDemo
  3. {
  4.         public static void main(String[] args) throws IOException
  5.         {
  6.                 // 定义文件文件对象

  7.                 String file = "D:\\黑马程序员_毕向东_Java基础视频教程第01天-10-注释.avi"; // 需要复制的文件avi文件

  8.                 //String file = "D:\\DBDownload\\汇总\\zong.txt"; //复制txt文件大小都一致

  9.                

  10.                 // 创建一个文件读取流对象
  11.                 FileReader fr = new FileReader(file);

  12.                 // 创建IO的写入流对象,此处定义ture是为了多次补充写入
  13.                 // 把写入流放到读取代码上面,是因为需要将读取到的数据,及时写入到新文件中
  14.                 FileWriter fw = new FileWriter("d:\\01-10.avi");

  15.                 // 读取文件中的一个字符 ,如果读取出完后就返回-1
  16.                 int num = 0;
  17.                 // 条件中可以先将变量赋值然后进行比较,但是不能直接在条件中定义变量。
  18.                 // 此处在条件中赋值的作用是防止多输出一次-1
  19.                 while ((num=fr.read()) !=-1)
  20.                 {
  21.                         fw.write(num);
  22.                 }

  23.                 // 写入完成后,关闭流。
  24.                 fw.close();
  25.                 fr.read();
  26.                
  27.                 System.out.println("复制成功");
  28.                
  29.                


  30.         }
  31. }
复制代码
FileReader和FileWriter不适合复制视频类型的文件吗?我发现复制后少了许多文件的属性信息。例如视频的播放长度、视频的播放音频格式等的。

评分

参与人数 1技术分 +1 收起 理由
张熙韬 + 1

查看全部评分

6 个回复

倒序浏览
程序改正如下:
import java.io.*;

public class CopyMedia {

        /**
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub

                BufferedInputStream bis = null;
                BufferedOutputStream bos = null;
               
                try {
                        bis = new BufferedInputStream(new FileInputStream("D:\\黑马程序员_毕向东_Java基础视频教程第01天-10-注释.avi"));
                        bos = new BufferedOutputStream(new FileOutputStream("D:\\01-10.avi"));
                       
                        int len = 0;
                        while((len = bis.read()) != -1){
                                bos.write(len);
                        }
                } catch (FileNotFoundException e) {
                        // TODO Auto-generated catch block
                        throw new RuntimeException("未找到源文件");
                } catch (IOException e) {
                        // TODO Auto-generated catch block
                        throw new RuntimeException("拷贝文件失败");
                }finally{
                        if(bos != null){
                                try {
                                        bos.close();
                                } catch (IOException e) {
                                        // TODO Auto-generated catch block
                                        throw new RuntimeException("文件写入流资源关闭失败");
                                }
                        }
                       
                        if(bis != null){
                                try {
                                        bis.close();
                                } catch (IOException e) {
                                        // TODO Auto-generated catch block
                                        throw new RuntimeException("文件读取流资源关闭失败");
                                }
                        }
                }
        }

}

注:
1、此源文件属于字节文件,应该使用字节流。
2、文件路径最好不要出现中文
3、此源文件一般比较大,使用缓冲技术比较好。
4、多看看毕老师的教学视屏,上面讲的很详细

评分

参与人数 1技术分 +1 收起 理由
张熙韬 + 1

查看全部评分

回复 使用道具 举报
复制视频文件以及音频文件用自己流呀
Reader 与Writer是操作纯文本文件的
回复 使用道具 举报
怎么能用字符流的类去处理字节流的东西呢?一看没有认真看毕老师的io视频了吧。
老师总结的:
流操作的基本规律:
     通过3个明确来完成。
1.明确源和目的
     源:输入流。InputStream Reader
     目的:输出流。OutputStream Writer
2.操作的数据是否是纯文本
     是:字符流
     不是:字节流。
3.当体系明确后,再明确要使用哪些具体的对象。
     通过设备来进行区分:
     源设备:内存,硬盘,键盘
     目的设备:内存,硬盘,控制台。
回复 使用道具 举报
Writer和Reader只能用来处理纯文本数据,而类似于图片,音频文件,视频文件只能用inputStream和OutputStream来读取和写入文件
回复 使用道具 举报
如果仍有问题,请继续追问,如果问题已解决,请将分类改为已解决,谢谢
回复 使用道具 举报
Reader和Writer是专门操作纯文本文件的字符流.
xx.avi要用字节流来操作.比如FileInputStream FileOutputStream.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马