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

© 孙飞 中级黑马   /  2012-7-11 12:41  /  1986 人查看  /  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 个回复

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

慢慢理清了,谢了
回复 使用道具 举报
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 赞一个!

查看全部评分

回复 使用道具 举报
是不是除了键盘输入的情况,其它只要源不是纯文本文件,都不能优化?
回复 使用道具 举报
feigecal 发表于 2012-7-11 13:14
那BufferedReader和Bufferedwriter什么情况下可以用来优化字节流呢?

当你要传输的数据必须以字符作为最终显示方式的时候.
回复 使用道具 举报
周恺 发表于 2012-7-11 13:03
  • 楼主,MP3是二进制文件,不能使用字符串作为缓冲区.也不能使用BufferedReader和BufferedWrite
    如果你将它 ...

  • 那BufferedReader和Bufferedwriter什么情况下可以用来优化字节流呢?
    回复 使用道具 举报
    • 楼主,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();
    •                           }
    回复 使用道具 举报
    您需要登录后才可以回帖 登录 | 加入黑马