package com.yaxing.io;import java.io.FileReader;
import java.io.IOException;public class FileReaderDemo { /**
 * @param args
 */
public static void main(String[] args) {
FileReader fw = null;
try {
fw = new FileReader("c:\\w.txt");
// int ch = 0;
// while ((ch = fw.read()) != -1) {
// System.out.println("读取:" + (char) ch);
// }
 
while ((fw.read()) != -1) {
System.out.println("读取:" + (char)fw.read());
}
} catch (IOException e) { e.printStackTrace();
} finally {
if (fw != null) {
try {
fw.close();
} catch (IOException e) { e.printStackTrace();
}
}
}
}}
上面注释的部分读取,输出正常
而使用了下面的输出,则不正常,只输出了部分数据,为啥呢?
读取:s
读取:c
读取:1
读取:3
读取:文本文件内容如下:
asdcr1231
while ((fw.read()) != -1) {
System.out.println("读取:" + (char)fw.read());
}这里面两个 fw.read()的值不一样吗?
另外 直接输出 fw.read()这个输出的是啥呢?ascii码还是?

解决方案 »

  1.   

    while ((fw.read()) != -1) { // 这里你已经读了一点数据了,但是没有输出。
                    System.out.println("读取:" + (char)fw.read());
                }
      

  2.   

    就是这样,fw.read()调用后已经读取了数据,返回的是读取字符对应的编码的值(比如'龙'的utf-8里的值是23992,打个比方)。不需要再读了。
      

  3.   

    while ((fw.read()) != -1) { // 这里读了一次数据
      System.out.println("读取:" + (char)fw.read());//这里又读了一次
      }你输出的都是第二次读的,当第二次读的是最后一个时,也没有检查到,再来读第一次时,就会出错。