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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 孙飞 中级黑马   /  2012-7-11 12:41  /  1633 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 feigecal 于 2012-7-11 14:00 编辑
  1. /**
  2. 需求:将一个图片文件中的数据存储到另一个文件中,复制文件。
  3. 分析:源,使用InputStream Reader
  4. 不是纯文本文件所以用InputStream
  5. 设备是硬盘上的一个文件,可以用字符流的方法进行优化,用到InputStreamReader BufferedReader
  6. BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream("")));
  7. 分析目的:使用OutputStream Writer
  8. 不是纯文本文件,所以用OutputStream
  9. 设备是硬盘上的一个文件,可以用字符流的方法进行优化,用到OutputStreamWriter BufferedWriter
  10. BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("")));
  11. */
  12. import java.io.*;
  13. class CopyFileDemo
  14. {
  15.             public static void main(String[] args)
  16.            {
  17.                    BufferedReader br=null;
  18.                    BufferedWriter bw=null;
  19.                    try
  20.                   {
  21.                             br=new BufferedReader(new InputStreamReader(new FileInputStream("e:\\0.mp3")));
  22.                             bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("e:\\3.mp3")));
  23.                             String line=null;
  24.                             while ((line=br.readLine())!=null)
  25.                           {
  26.                                      bw.write(line);
  27.                                      bw.newLine();
  28.                                      bw.flush();
  29.                           }
  30.                   }
  31.                  catch (IOException e)
  32.                 {
  33.                           throw new RuntimeException();
  34.                 }
  35.                 finally
  36.                {
  37.                           try
  38.                          {
  39.                                   if (br!=null)
  40.                                 {
  41.                                         br.close();
  42.                                  }
  43.                          }
  44.                          catch (IOException e)
  45.                         {
  46.                                   throw new RuntimeException();
  47.                         }
  48.                         try
  49.                        {
  50.                                if (bw!=null)
  51.                               {
  52.                                       bw.close();
  53.                                }
  54.                         }
  55.                        catch (IOException e)
  56.                       {
  57.                                throw new RuntimeException();
  58.                        }
  59.             }

  60.        }
  61. }
复制代码
为什么拷贝后的文件比原文件小了一些。那里出了错,详解一下

评分

参与人数 1技术分 +1 收起 理由
刘笑 + 1 赞一个!

查看全部评分

6 个回复

倒序浏览
  • 楼主,MP3是二进制文件,不能使用字符串作为缓冲区.也不能使用BufferedReader和BufferedWrite
    如果你将它变成了字符串的话会造成字节丢失,文字自然就小了.
    try里的内容改一下.
                               br=new FileInputStream("e:\\0.mp3");
  •                             bw=new FileOutputStream("e:\\3.mp3");
  •                        byte[] buff=new byte[1024];
  •                                int len=0;
  •                             while ((len=br.read(buff))!=-1)
  •                           {
  •                                     
                                        bw.wirte(buff,0,len);
  •                                     bw.flush();
  •                           }
回复 使用道具 举报
周恺 发表于 2012-7-11 13:03
  • 楼主,MP3是二进制文件,不能使用字符串作为缓冲区.也不能使用BufferedReader和BufferedWrite
    如果你将它 ...

  • 那BufferedReader和Bufferedwriter什么情况下可以用来优化字节流呢?
    回复 使用道具 举报
    feigecal 发表于 2012-7-11 13:14
    那BufferedReader和Bufferedwriter什么情况下可以用来优化字节流呢?

    当你要传输的数据必须以字符作为最终显示方式的时候.
    回复 使用道具 举报
    是不是除了键盘输入的情况,其它只要源不是纯文本文件,都不能优化?
    回复 使用道具 举报
    mp3格式是不能转换为字符流的
    下面我修改了一下,希望对你有帮助:
    import java.io.*;
    class CopyFileDemo1
    {
                public static void main(String[] args)
               {
                           BufferedInputStream bi=null;
                       BufferedOutputStream bo=null;
                      
                       try
                      {
                               bi=new  BufferedInputStream(new FileInputStream("E:\\0.mp3\\浮沉主题曲.mp3"));
                           bo=new BufferedOutputStream(new FileOutputStream("E:\\3.mp3"));
                           
                           byte by[]=new byte [bi.available()];     

                           bi.read(by);

                           bo.write(by);
                      }
                     catch (IOException e)
                    {
                              throw new RuntimeException();
                    }
                    finally
                   {
                              try
                             {
                                      if (bi!=null)
                                    {
                                            bi.close();
                                     }
                             }
                             catch (IOException e)
                            {
                                      throw new RuntimeException();
                            }
                            try
                           {
                                   if (bo!=null)
                                  {
                                          bo.close();
                                   }
                            }
                           catch (IOException e)
                          {
                                   throw new RuntimeException();
                           }
                }

           }
    }

    评分

    参与人数 1技术分 +1 收起 理由
    刘笑 + 1 赞一个!

    查看全部评分

    回复 使用道具 举报
    孙飞 中级黑马 2012-7-11 14:00:34
    7#
    孙新强 发表于 2012-7-11 13:38
    mp3格式是不能转换为字符流的
    下面我修改了一下,希望对你有帮助:
    import java.io.*;

    慢慢理清了,谢了
    回复 使用道具 举报
    您需要登录后才可以回帖 登录 | 加入黑马