A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. public static void copy_1() throws IOException
  2.         {
  3.                 FileReader fr = new FileReader("DateDemo.java");//与已有文件关联
  4.                
  5.                 //创建目的地。
  6.                 FileWriter fw = new FileWriter("demo_copy.txt");//目的地

  7.                 int num = 0;

  8.                 while((num = fr.read())!=-1)
  9.                 {
  10.                         fw.write(num);//写入,关键,为什么写num?
  11.                 }

  12.                 fr.close();
  13.                 fw.close();

  14.         }
复制代码
问题在这:

当写
  1. int ch = 0;
  2.                 while((ch=fr.read())!=-1)
  3.                 {
  4.                         System.out.println((char)ch);
  5.                 }
复制代码
时候,我们知道可以打印char字符。
问题是:int num可以记住一个char字符。fr.read()返回的是读到的字符int类型,这个字符可以是汉字?如果是汉字,这个int还可以记住???

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

3 个回复

倒序浏览
由于编码不同,多字节的字符可能占用多个字节。比如GBK的汉字就占用2个字节,而UTF-8的汉字就占用3个字节。 所以,字符流是根据指定的编码,将1个或多个字节转化为java里面的unicode的字符,然后进行操作。汉字也是一个整型,首字节在81-FE 之间,尾字节在40-FE 之间 的字节被认为是汉字或者符号。16进制81的10进制表示为129,也就是第一个字节在129以上会被认为是汉字。例如,下面代码:
  1.     import java.io.FileInputStream;  
  2.     import java.io.FileReader;  
  3.     import java.io.FileWriter;  
  4.     import java.io.IOException;  
  5.       
  6.       
  7.     public class Tmp {  
  8.         public static void main(String[] args) throws IOException {  
  9.             FileWriter fw = new FileWriter("d:/aa.txt");  
  10.             fw.write("北京");  
  11.             fw.close();  
  12.             FileReader fis = new FileReader("d:/aa.txt");  
  13.             //FileInputStream fis = new FileInputStream("d:/aa.txt");  
  14.             int a;  
  15.             while((a = fis.read()) != -1){  
  16.                 System.out.println(a);           //我觉得转化出现在这里  
  17.             }  
  18.             fis.close();  
  19.         }  
  20.     }  
复制代码
它的输出结果是:
21271
20140

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
先回答第一个:为什么写入num?这个num在while循环中已经被赋值了。值是从文件读取出来的,是一个字符。属于文本中的数据,你拷贝文本,当然要把读取出来的文本数据写到输出流中。

如果是汉字,这个int还可以记住???字符跟int是可以相互转型的。中文字符两个字节,int为4个字节,大的可以包含小的。就像byte可以赋值给int那样。

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
无参数的read方法读的是字节。。。至于为什么返回的是int,我想也是防止读到11111111的情况吧,
转成int就是00000000 11111111 ,当读到尾的时候,应该是将返回值变成 11111111 11111111。

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马