public static void ReadFileFromByte(String fileName){
//file对象
File file = new File(fileName);
//打开文件输入流
try {
InputStream in = new FileInputStream(file);
//读取数据
int readBy = 0;
while ((readBy = in.read()) != -1) {
//System.out.write((char)readBy);
//System.out.write(readBy);
//System.out.print(readBy);
System.out.print((char)readBy);
}
//关闭文件
in.close();
} catch (IOException e) {
e.getStackTrace();
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
String fileName = "E:\\exercise\\java\\20080627\\FileInputStream\\src\\com\\lwj\\ReadFromFile.java";
ReadFileFromByte(fileName); }}
为什么System.out.write(readBy);能读汉字字符,它不是一个字节一个字节读取的吗?汉字不是字符吗?
System.out.write((char)readBy);也不会报错?
System.out.print((char)readBy);为什么不能读汉字字符?
很迷惑 希望大家帮忙

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【li_589】截止到2008-06-27 17:13:55的历史汇总数据(不包括此帖):
    发帖数:1                  发帖分:100                
    结贴数:0                  结贴分:0                  
    未结数:1                  未结分:100                
    结贴率:0.00  %            结分率:0.00  %            
    如何结贴请参考这里:http://topic.csdn.net/u/20080501/09/ef7ba1b3-6466-49f6-9d92-36fe6d471dd1.html
      

  2.   

    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;public class IOTest { public static void ReadFileFromByte(String fileName) {
    //file对象
    File file = new File(fileName);
    //打开文件输入流
    try {
    InputStream in = new FileInputStream(file);
    //读取数据
    int readBy = 0;
    while ((readBy = in.read()) != -1) {
    //System.out.write((char)readBy);
    //System.out.write(readBy);
    //System.out.print(readBy);
    System.out.print((char)readBy);
    }
    //关闭文件
    in.close();
    } catch (IOException e) {
    e.getStackTrace();
    }
    } public static void main(String[] args) {
    String fileName = "E:\\exercise\\java\\20080627\\FileInputStream\\src\\com\\lwj\\ReadFromFile.java";
    ReadFileFromByte(fileName);
    }}
    格式化下先
      

  3.   

    System.out.write((char)readBy); 这句是将读取到的字节强制类型转换到 char 类型再打印输出的,当然会打印出字符,但如果有汉字会出现乱码。
    一般汉字多为双字节或多字节编码的,也就是每个汉字字符需要至少两个字节才能表示和存储(根据文本文件编码不同每个汉字用多少个字节表示也不一定),而你读取到的是一个字节(很可能只是半个汉字的编码)。
      

  4.   

    因为汉字的编码长度是char的两倍,转换成char当然是乱码
      

  5.   

    为什么System.out.write(readBy);能读汉字字符,它不是一个字节一个字节读取的吗?汉字不是字符吗?能不能讲的仔细些
      

  6.   

    ??????
    UTF-8每个字符可能用一个两个或三个字节编码,Unicode每字符用2个或4个字节编码,GBK用两个字节编码字符,这些跟char有关系吗?在Java内部每个字符(无论哪国语言)都是Unicode编码的,基本每个字符对应一个char(16位2个字节)。
      

  7.   


    是一个一个字节读的...汉字是字符在java中主要有两种流形式....字节流 和 字符流字节流的基类主要是InputStream和OutPutStream
    字符流的基类主要是Redaer和Writer一定要区别开二者的关系.....字节流的就都要用字节流的处理形式字符流的就都要字符流的处理形式
      

  8.   

    UTF-8每个字符可能用一个两个或三个字节编码,Unicode每字符用2个或4个字节编码,GBK用两个字节编码字符,这些跟char有关系吗?在Java内部每个字符(无论哪国语言)都是Unicode编码的,基本每个字符对应一个char(16位2个字节)。
      

  9.   

    这样的话 char也能接收中文汉字字符了啊,不明白