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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 魏征 中级黑马   /  2012-4-27 21:42  /  2198 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

        已知有一个文本"FileWriter.txt"内容如下
abcdefg
houhou
hiahia

class Demo1{
public static void main(String[] args)throws IOException
{
FileReader fr=new FileReader("FileWriter.txt");
        int ch=0;
                while ( (ch=fr.read())!=-1)
                {
                        System.out.print("ch="+(char)ch+" ");//为了观赏性强打印"ch="和" "。
                }

                fr.close();
}}
Demo1结果如下:
ch=  ch=b ch= c ch=d ch=e ch=f ch=g ch=
ch=h ch=o ch=u ch=h ch=o ch=u ch=
ch=h ch=i ch=a ch=h ch=i ch=a

第一个字符怎么没出来 为什么打印的是ch=  ,而第一二行最后的ch= ,又代表着什么。

class Demo2{
public static void main(String[] args)throws IOException
{
FileReader fr=new FileReader("FileWriter.txt");
                            int ch=0;
                while ( (ch=fr.read())!=-1)
                {
                        System.out.print((char)ch);//只打印每个字符。
                }
                                 fr.close();
}}
Demo2结果如下:
abcdefg
houhou
hiahia
我直接打印字符,第一个字符a又出来了。

class Demo3{
public static void main(String[] args)throws IOException
{
int ch=0;
                while ( (ch=fr.read())!=-1)
                {
                        System.out.println("ch="+(char)ch+" ");//换行
                }
                                   fr.close();
}}
Demo3每次打印都换行,结果如下:
ch=a
ch=b
ch=c
ch=d
ch=e
ch=f
ch=g
  h=
ch=


ch=h
ch=o
ch=u
ch=h
ch=o
ch=u
  h=
ch=

ch=h
ch=i
ch=a
ch=h
ch=i
ch=a


在每行文本中每行的最后一个字符后面 " h= ""ch= "这又是因为什么?
以上问题本人比较迷惑,请高人指教。

3 个回复

倒序浏览
因为你文件中每行都有一个换行符,在windows中换行符是两个字节'\r''\n'组成的,所以你的输出后面会有ch=
回复 使用道具 举报
第一个字符a应该能打印出来,这里问题不大。一二行最后会打印两个ch= ,因为我们在记事本中键入字符数据的时候,结束一行都会键入回车符,而\r\n代表回车符,占用两个字节,所以第一个ch= ,读取的是\r,第二个ch= ,读取的是\n。Demo1和Demo3的解释是相同的。
回复 使用道具 举报
这和编码有关系,在毕老师视频中编码这一块儿提到过字符的演变顺序unicode->ucs-2->utf-8另外也提到windows和linux的编码不同,区别别人已经说了,平时在编程时要换行转意字符就是\n,如果是要读windows下的文件就是\r\n了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马