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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 程洋 中级黑马   /  2014-1-2 15:43  /  2027 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


  1. <P>import java.io.*;
  2. public class a {
  3. public static void main(String[] args) throws IOException
  4. {
  5.   copy();
  6. }
  7. public static void copy()
  8. {
  9.   BufferedInputStream bufis=null;
  10.   BufferedOutputStream bufos=null;
  11.   try
  12.   {
  13.    bufis=new BufferedInputStream(new FileInputStream("c:\\Damea.java"));
  14.    bufos=new BufferedOutputStream(new FileOutputStream("d:\\Damea.java"));
  15.    int by=0;
  16.    while((by=bufis.read())!=-1)
  17.    {
  18.     bufos.write(by);
  19.    }
  20.   }
  21.   catch(IOException e)
  22.   {
  23.    throw new RuntimeException("复制文件失败");
  24.   }
  25.   finally
  26.   {
  27.    try
  28.    {
  29.     if(bufis!=null)
  30.      bufis.close();   
  31.    }
  32.    catch(IOException e)
  33.    {
  34.     throw new RuntimeException("读取关闭失败");
  35.    }
  36.    try
  37.    {
  38.     if(bufos!=null)
  39.      bufos.close();   
  40.    }
  41.    catch(IOException e)
  42.    {
  43.     throw new RuntimeException("写入关闭失败");
  44.    }
  45.   }
  46.   
  47.   
  48. }</P>
  49. <P>}
  50. </P>
复制代码
为什么总是复制失败,图片就就能复制,文本复制不了

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

7 个回复

倒序浏览
用你的代码,我可以复制文本,没错。
只是,为什么你用Buffered却没有用缓冲?那不是大大的浪费?

  1. byte[] buff = new byte[1024];
  2.                         int len = 0;
  3.                         while((len = bufis.read(buff))!=-1){
  4.                                 bufos.write(buff,0,len);
  5.                         }
复制代码

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
最痛苦的就是流对象有很多,不知道该用哪一个。
通过两个明确来完成。


1.明确源和目的。
  源:输入流 inputStream Reader
目的:输出流 outputStream Writer
2.操作的文件是否是纯文本
  是:字符流
不是:字节流
所以复制纯文本文件应当用字符流而不能用字节流!

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报 0 1
楼上结论错误,楼主程序没问题,能复制文本,看你c盘下有没有Damea.java这个文件,别搞成Damea.txt了。字符流也是基于字节流的
回复 使用道具 举报
  1. package com;
  2. import java.io.*;
  3. public class a {
  4. public static void main(String[] args) throws IOException
  5. {
  6.   copy();
  7. }
  8. public static void copy() throws RuntimeException
  9. {
  10.   BufferedInputStream bufis=null;
  11.   BufferedOutputStream bufos=null;
  12.   try
  13.   {
  14.    bufis=new BufferedInputStream(new FileInputStream("d:\\Damea.java"));
  15.    bufos=new BufferedOutputStream(new FileOutputStream("e:\\Damea.java"));
  16.    int by=0;
  17.    while((by=bufis.read())!=-1)
  18.    {
  19.     bufos.write(by);
  20.    }
  21.   }
  22.   catch(IOException e)
  23.   {
  24.    throw new RuntimeException("复制文件失败");
  25.   }
  26.   finally
  27.   {
  28.    try
  29.    {
  30.     if(bufis!=null)
  31.      bufis.close();   
  32.    }
  33.    catch(IOException e)
  34.    {
  35.     throw new RuntimeException("读取关闭失败");
  36.    }
  37.    try
  38.    {
  39.     if(bufos!=null)
  40.      bufos.close();   
  41.    }
  42.    catch(IOException e)
  43.    {
  44.     throw new RuntimeException("写入关闭失败");
  45.    }
  46.   }
  47. }
  48. }
  49. 运行了  还是你没有在C下创建文件。图片,音频等用字节流。存文本最好用字符流
复制代码
回复 使用道具 举报
hurryup 发表于 2014-1-2 16:03
最痛苦的就是流对象有很多,不知道该用哪一个。
通过两个明确来完成。

:lol 哥们我反对 字符流的可以用字节流来做  字符流的底层也是字节流
回复 使用道具 举报
浮出一个美 发表于 2014-1-2 15:56
用你的代码,我可以复制文本,没错。
只是,为什么你用Buffered却没有用缓冲?那不是大大的浪费?

Bufered本身不就是缓冲吗
回复 使用道具 举报
程洋 发表于 2014-1-3 08:47
Bufered本身不就是缓冲吗

他的意思是readLine()
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马