黑马程序员技术交流社区
标题:
关于IO流复制文件,一个一个字符复制的问题。各位大神帮忙下
[打印本页]
作者:
王溢君
时间:
2013-1-27 00:55
标题:
关于IO流复制文件,一个一个字符复制的问题。各位大神帮忙下
public static void copy_1() throws IOException
{
FileReader fr = new FileReader("DateDemo.java");//与已有文件关联
//创建目的地。
FileWriter fw = new FileWriter("demo_copy.txt");//目的地
int num = 0;
while((num = fr.read())!=-1)
{
fw.write(num);//写入,关键,为什么写num?
}
fr.close();
fw.close();
}
复制代码
问题在这:
当写
int ch = 0;
while((ch=fr.read())!=-1)
{
System.out.println((char)ch);
}
复制代码
时候,我们知道可以打印char字符。
问题是:int num可以记住一个char字符。fr.read()返回的是读到的字符int类型,这个字符可以是汉字?如果是汉字,这个int还可以记住???
作者:
廖成
时间:
2013-1-27 09:04
由于编码不同,多字节的字符可能占用多个字节。比如GBK的汉字就占用2个字节,而UTF-8的汉字就占用3个字节。 所以,字符流是根据指定的编码,将1个或多个字节转化为java里面的unicode的字符,然后进行操作。汉字也是一个整型,首字节在81-FE 之间,尾字节在40-FE 之间 的字节被认为是汉字或者符号。16进制81的10进制表示为129,也就是第一个字节在129以上会被认为是汉字。例如,下面代码:
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class Tmp {
public static void main(String[] args) throws IOException {
FileWriter fw = new FileWriter("d:/aa.txt");
fw.write("北京");
fw.close();
FileReader fis = new FileReader("d:/aa.txt");
//FileInputStream fis = new FileInputStream("d:/aa.txt");
int a;
while((a = fis.read()) != -1){
System.out.println(a); //我觉得转化出现在这里
}
fis.close();
}
}
复制代码
它的输出结果是:
21271
20140
作者:
黄锦成
时间:
2013-1-27 10:00
先回答第一个:为什么写入num?这个num在while循环中已经被赋值了。值是从文件读取出来的,是一个字符。属于文本中的数据,你拷贝文本,当然要把读取出来的文本数据写到输出流中。
如果是汉字,这个int还可以记住???字符跟int是可以相互转型的。中文字符两个字节,int为4个字节,大的可以包含小的。就像byte可以赋值给int那样。
作者:
黑马张英涛
时间:
2013-1-27 10:17
无参数的read方法读的是字节。。。至于为什么返回的是int,我想也是防止读到11111111的情况吧,
转成int就是00000000 11111111 ,当读到尾的时候,应该是将返回值变成 11111111 11111111。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2