用字节流读入
import java.io.*;
class FileInputStreamDemo1 {
    public static void main(String[] args) {
         try {
                  File file = new File("test.txt");   //创建文件对象
             //使用文件对象创建文件输入流对象
     FileInputStream fis = new FileInputStream("d:\\aaa.txt");
                  for (int i = 0; i < file.length(); i++) {
                          char ch = (char)(fis.read());  //循环读取
                          System.out.println("第"+i+"个字节:"+(char)c);
                    }
                  System.out.println();
                  fis.close();     //关闭流
          } catch (FileNotFoundException fnfe) {
                   System.out.println("文件打开失败。");
          } catch (IOException ioe) {
                   ioe.printStackTrace();
          }
}}
用字符流读入
import java.io.*;
class TestFileReader
{     public static void main(String args[]){
     int c=0,i=0;
     FileReader fr;
     try {  fr=new FileReader("d://aaa.txt");
           while((c=fr.read())!=-1){i++;
               System.out.println("第"+i+"个字符:"+(char)c);}
         fr.close();
                }catch(Exception e){}
       }
}
如果aaa.txt的内容是“abcd”,则两个程序打印的结果安全相同。
第一个字节:a                    第一个字符:a

这是为什么?

解决方案 »

  1.   

    System.out.println("第"+i+"个字符:"+(char)c);}
    你这句就把 那些 byte 按 char 算了
      

  2.   

    String str = new String("abcdefg");
    System.out.println(str.charAt(2)); //  output c
    这个或许能给你点启示
      

  3.   

    一个英文字母占一个字节,一个中文字符占两个字节.
    JAVA中
    char是固定长度两个字节,也就是说char可以表示一个字母,或一个汉字
    byte是固定长度,一个字节,也就是说byte可以表示一个字母,但不能表示汉字.
      

  4.   

    按这个API看 应该是算一个字符
      

  5.   

    如果文本内容使用ASCII或ANSI编码,则一个英文字母占一个字节;如果使用UNICODE编码则占用两个字节。
    请参考 Java字符串与字符集的基本概念