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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 还是回去火星吧 于 2014-3-4 18:29 编辑

  1. <P>import java.io.*;
  2. class Test{
  3. public static void main(String[] args)throws Exception{
  4. //数据源
  5. BufferedReader bfr=new BufferedReader(new InputStreamReader(new FileInputStream("E:\\DD\\d.txt"))) //这个目录如下图。
  6. //数据目的
  7. ByteArrayOutputStream bos=new ByteArrayOutputStream();
  8. //将源数据写入目的数据。
  9. int by=0;
  10. while((by=bfr.read())!=-1){
  11. bos.write(by);
  12. }
  13. System.out.println(bos.size());
  14. System.out.println(bos.toString());
  15. bos.writeTo(new FileOutputStream("E:\\DD\\e.txt")); //写入之后全是乱码,前面获取的时候,需要转换在存入缓冲区吗?</P>
  16. <P>//怎么操作,存入后,还是一模一样的字符?
  17. }
  18. }</P>
复制代码
读取d记事本,写入e记事本,但是变成了乱码,怎么操作才不会成乱码呢?


评分

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

查看全部评分

3 个回复

正序浏览
ByteArrayOutputStream操作的是字节,通过FileInputStream读取字节,然后通过InputStreamReader转为了字符,通过BufferedReader读取字符写入字节,这个逻辑就乱了,而且BufferedReader的read方法读一个字符返回的是它的assic码,然后写入字节解码就乱了。
我改了你的代码,如下

  1. import java.io.*;
  2. class Test{
  3. public static void main(String[] args)throws Exception{
  4. //数据源
  5. // BufferedReader bfr=new BufferedReader(new InputStreamReader(new FileInputStream("d:\\d.txt"))); //这个目录如下图。
  6. FileInputStream fis = new FileInputStream("d:\\d.txt");
  7. //数据目的
  8. ByteArrayOutputStream bos=new ByteArrayOutputStream();
  9. //将源数据写入目的数据。
  10. byte[] bys = new byte[1024];
  11. int by = 0;
  12. while(( by = fis.read(bys))!=-1){
  13. bos.write(bys,0,by);
  14. }
  15. System.out.println(bos.size());
  16. System.out.println(bos.toString());
  17. bos.writeTo(new FileOutputStream("d:\\e.txt")); //写入之后全是乱码,前面获取的时候,需要转换在存入缓冲区吗?
  18. //怎么操作,存入后,还是一模一样的字符?
  19. }
  20. }
复制代码

点评

e.c
不错,学习了  发表于 2014-3-5 18:15

评分

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

查看全部评分

回复 使用道具 举报
本帖最后由 e.c 于 2014-3-4 19:07 编辑

同问,怎么是乱码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马