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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 抽烟男孩 中级黑马   /  2013-3-28 21:13  /  1121 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 抽烟男孩 于 2013-3-29 16:34 编辑

我先在D盘建立个a.mp3文件用记事本编辑,将他拷贝到D盘的b.txt文件
代码如下:

  1. import java.io.* ;
  2. public class Temp{
  3.         public static void main(String args[]){
  4.                 File f1 = new File("D:\\a.mp3") ;        // 源文件的File对象
  5.                 File f2 = new File("D:\\b.txt") ;        // 目标文件的File对象
  6.                 if(!f1.exists()){
  7.                         System.out.println("源文件不存在!") ;
  8.                         System.exit(1) ;
  9.                 }
  10.                 InputStream input = null ;                // 准备好输入流对象,读取源文件
  11.                 Writer out = null ;                // 准备好输出流对象,写入目标文件
  12.                 try{
  13.                         input = new FileInputStream(f1) ;
  14.                 }catch(FileNotFoundException e){
  15.                         e.printStackTrace() ;
  16.                 }
  17.                 try{
  18.                         out = new FileWriter(f2) ;
  19.                 }catch(FileNotFoundException e){
  20.                         e.printStackTrace() ;
  21.                 }
  22.                 if(input!=null && out!=null){        // 判断输入或输出是否准备好
  23.                         int temp = 0 ;        
  24.                         try{
  25.                                 while((temp=input.read())!=-1){        // 开始拷贝
  26.                                         out.write(temp) ;        // 边读边写
  27.                                 }
  28.                                 System.out.println("拷贝完成!") ;
  29.                         }catch(IOException e){
  30.                                 e.printStackTrace() ;
  31.                                 System.out.println("拷贝失败!") ;
  32.                         }
  33.                         try{
  34.                                 input.close() ;                // 关闭
  35.                                 out.close() ;                // 关闭
  36.                         }catch(IOException e){
  37.                                 e.printStackTrace() ;
  38.                         }
  39.                 }
  40.         }        
  41. }

  42. }
复制代码
本希望实现在b.txt中看到a.mp3中记事本编辑的内容,:(但
我想问不是所有的IO流都是有字节流扩展的吗,那字符流是如何包装的呢?它的编码方式是UTF-8吗?

点评

如果问题未解决,请继续追问,如果问题解决了,请将帖子分类改为已解决,谢谢  发表于 2013-3-29 07:22

评分

参与人数 1技术分 +1 收起 理由
洪建超 + 1

查看全部评分

1 个回复

倒序浏览
看你的while循环:
  1. while((temp=input.read())!=-1){        // 开始拷贝
  2.                                         out.write(temp) ;        // 边读边写
  3.                                 }
复制代码
你把字节流的数据,写到了字符流中了,读一个字节写一个字符,貌似文件变大了
当然内容一定是错误的了

再者我们看writer类的write方法:
  1. public void write(int c) throws IOException {
  2.         synchronized (lock) {
  3.             if (writeBuffer == null){
  4.                 writeBuffer = new char[writeBufferSize];
  5.             }
  6.             writeBuffer[0] = (char) c;
  7.             write(writeBuffer, 0, 1);
  8.         }
  9.     }
复制代码
这里写的是字符而不是字节

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马