int ch;
File fp=new File("C:\\Users\\jiang\\Desktop\\shiti.txt");
try{
FileInputStream fin=new FileInputStream(fp);
System.out.println("xinxiwei");
ch=fin.read();
while(ch!=-1)
{
System.out.println((char)ch);
ch=fin.read();
}
fin.close();
}
catch(Exception e)
{
System.out.println(e);
}
******************************************************************************************************
                 File file = new File("C:\\Users\\jiang\\Desktop\\shiti.txt");
        InputStream in = null;
        try {
            System.out.println("以字节为单位读取文件内容,一次读一个字节:");
            // 一次读一个字节
            in = new FileInputStream(file);
            int tempbyte;
            while ((tempbyte = in.read()) != -1) {
                System.out.write(tempbyte);
            }
            in.close();
        } 
        catch (IOException e) {
            e.printStackTrace();
            return;
        }
这两段代码都是错文件读取数据,内容是  数字和汉字、为什么第一段程序数字可以读出,但是汉字全是问号。第二段程序则正确读出汉字和数字、很是纠结,没有看出哪里有不同、求高人指点!~O(∩_∩)O谢谢

解决方案 »

  1.   

    问题已经找出   将第一段程序的输出System.out.println((char)ch);中的println改为write就可以成功的读出汉字、请问为什么呢,坐等高手
      

  2.   

    因为汉字占两个字节,第二段程序是每次打印int类型,是两个字节。
    第一段程序是打印字节,把汉字给拆开了。
      

  3.   

    你在
    System.out.write(tempbyte);
    之前加一句
    System.out.println(tempbyte);
    试试还可以打印出中文吗?
      

  4.   

    如果是读取文本内容文件
    使用bufferedInputReader(new InputStreamReader(new FileInputStream(File)))(可能拼写错误)
      

  5.   

    补充,bufferedInputReader(InputStream,Encoding)
      

  6.   

    先说第一个吧,因为你采用的是字节流(FileInputStream),所以read()方法每次读取一个字节出来,接着你就将这个字节输出了,而汉字一般是占两个字节。一个字节一个字节的输出,输出出来的汉字肯定是乱码。所以第一个程序输出的汉字是乱码。而第二个程序就不一样了,第二个程序相当于你每次读取一个字节然后把它保存在占4个字节的int变量中。只有当int变量中数据存满时(也就是存取4个字节的数据)才输出一次。这个int变量就相当于一个缓存区,缓存区满的时候才输出一次。这个时候刚好可以存放两个汉字。所以可以输出汉字来。