黑马程序员技术交流社区

标题: IO流的问题 [打印本页]

作者: 章闽    时间: 2012-10-22 18:05
标题: IO流的问题
public static void main(String[] args) throws IOException {
        FileOutputStream fo = new FileOutputStream("D:\\k.txt");
        fo.write((int)'好');
        fo.close();
        }
用java io的字节流向文件存入一个“好”字,文件中出现了乱码,为什么?
如果存入一个“a”就可以!
作者: 宫明星    时间: 2012-10-22 18:09
fo.write((int)'好');
这步的问题,应该是类型转换出的问题。
作者: 唐进    时间: 2012-10-22 18:11
编码的问题,你的记事本是UTF-8编码存的,存取中文的时候会出现乱码
作者: 陆建平    时间: 2012-10-22 18:33
存储“好“时,用的编码是GBK,但用记事本打开时,记事本用的是‘UTF-8,
所以才出现乱码
作者: 陈琦    时间: 2012-10-22 18:37
据我所知 (int)'好' 获得是ANSII码,ANSII码应该不支持汉字,猜的,坐等大神
作者: qhasilver    时间: 2012-10-22 19:34
  1.         public static void main(String[] args) throws IOException {
  2.                 FileOutputStream fo = new FileOutputStream("D:\\k.txt");//建立输出文件
  3.                 BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fo));//转换输出流
  4.                 bw.write("你");//将字符串写入缓冲流               
  5.                 bw.flush();//执行缓冲流中的写入
  6.                 bw.close();//关闭缓冲
  7.                 fo.close();//关闭文件写入
  8.         }
复制代码

作者: 吴兵    时间: 2012-10-22 20:00
FileOutpuStream的write() 方法是将指定的字节写入此文件输出流。
写入前应该将字符使用.getBytes()转换为字节
  1.         public static void main(String[] args) throws IOException
  2.         {
  3.         FileOutputStream fo = new FileOutputStream("D:\\k.txt");
  4.         fo.write("好".getBytes());
  5.         fo.close();
  6.     }
复制代码

作者: 杨志男    时间: 2012-10-22 22:04
你用的是字节流,而汉字是字符流,你想以字节流的形式写入两个字符(两个字符代表一个汉字)肯定是不行的,应该把字符转成字节,楼上代码正确。
作者: 张亮    时间: 2012-10-23 22:44
本帖最后由 张亮 于 2012-10-23 22:47 编辑

public static void main(String[] args) throws IOException {
        FileOutputStream fo = new FileOutputStream("D:\\k.txt");
        fo.write((int)'好');//是这的问题,‘好’是字符类型,强转成int类型的值是22909,所以写入的就是22909对应的“}”
        fo.close();
        }




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2