黑马程序员技术交流社区
标题:
关于FileReader类中Read()方法的问题
[打印本页]
作者:
魏征
时间:
2012-4-27 21:42
标题:
关于FileReader类中Read()方法的问题
已知有一个文本"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= "这又是因为什么?
以上问题本人比较迷惑,请高人指教。
作者:
胡生蒙
时间:
2012-4-28 00:14
因为你文件中每行都有一个换行符,在windows中换行符是两个字节'\r''\n'组成的,所以你的输出后面会有ch=
作者:
蒋亮
时间:
2012-4-28 00:30
第一个字符a应该能打印出来,这里问题不大。一二行最后会打印两个ch= ,因为我们在记事本中键入字符数据的时候,结束一行都会键入回车符,而\r\n代表回车符,占用两个字节,所以第一个ch= ,读取的是\r,第二个ch= ,读取的是\n。Demo1和Demo3的解释是相同的。
作者:
亚男
时间:
2012-4-28 00:46
这和编码有关系,在毕老师视频中编码这一块儿提到过字符的演变顺序unicode->ucs-2->utf-8另外也提到windows和linux的编码不同,区别别人已经说了,平时在编程时要换行转意字符就是\n,如果是要读windows下的文件就是\r\n了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2