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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 贾成龙 中级黑马   /  2012-7-25 22:45  /  1792 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

import java.io.*;
class TransStreamDemo
{
public static void main(String[] args)throws IOException
{
  FileReader fr=new FileReader("haha.txt");
  OutputStreamWriter osw=
   new OutputStreamWriter(new FileOutputStream("haha.txt"),"utf-8");
  //为什么同名就不行呢?同名会发生下面的异常?求各位大侠帮忙解释一下。
  /*
  Exception in thread "main" java.lang.IndexOutOfBoundsException
        at sun.nio.cs.StreamEncoder.write(StreamEncoder.java:121)
        at java.io.OutputStreamWriter.write(OutputStreamWriter.java:207)
        at TransStreamDemo.main(TransStreamDemo.java:11)
  */
  char[] buf=new char[10];
  int len=fr.read(buf);
  osw.write(buf,0,len);
  osw.close();
  fr.close();
}
}

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

5 个回复

倒序浏览
IndexOutOfBoundsException指示某排序索引(例如对数组、字符串或向量的排序)超出范围时抛出。
import java.io.*;
class TransStreamDemo
{
public static void main(String[] args)throws IOException
{
  FileReader fr=new FileReader("haha.txt");//你读取文件用的是字符流,字符流默认的编码方式是GBK。
  OutputStreamWriter osw=
   new OutputStreamWriter(new FileOutputStream("haha.txt"),"utf-8");//你写入文件用的是字节转字符的桥梁流,这个流可以重新编写编码方式,你采用的是utf-8,你采用两种不同方式的编码方式,你在读入和写出的过程中肯定会出现超出范围的异常。因为GBK编码是4个字节,而utf-8是6个字节,超出范围,一定出现异常,把utf-8去掉就好了  //为什么同名就不行呢?同名会发生下面的异常?求各位大侠帮忙解释一下。
  /*
  Exception in thread "main" java.lang.IndexOutOfBoundsException
        at sun.nio.cs.StreamEncoder.write(StreamEncoder.java:121)
        at java.io.OutputStreamWriter.write(OutputStreamWriter.java:207)
        at TransStreamDemo.main(TransStreamDemo.java:11)
  */
  char[] buf=new char[10];
  int len=fr.read(buf);
  osw.write(buf,0,len);
  osw.close();
  fr.close();
}
}

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
你都说到了字符流默认编码方式是GBK,你在字节流换为字符时,又重新规定了编码方式为UTF-8。
两种编码方式操作读写,肯定会出异常。GBK一个字符占两个字节;UTF-8一个字符占三个字节。
希望有帮助

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
字符流默认编码方式为GBK它是中文编码表并且兼容GB2312, OutputStreamWriter osw=
   new OutputStreamWriter(new FileOutputStream("haha.txt"),"utf-8");上面这句代码又把 haha.txt默认的GBK改为了utf-8,所以会出现乱码
回复 使用道具 举报
我说说重点:
输出流和输入流同时操作一个文件,当然会出问题
一个读,一个有同时在写,能行么?

回复 使用道具 举报
谢谢各位大侠!明白了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马