write方法有多种写数据方式,其中write(char[] c)是一种效率比较高的,因为一次可以写多个字符,同时读取的时候为了保持一致,read方法也有read(char[] c),用来一次读取多个字符,不过有一点要注意的是,char[] c数组的长度在定义完后一般是不变的,而你读取或者写入的数据可能最后小于数组的长度,此时如果打印的话会将上次存在字符数组里的个别数据保存并打印下来看,下面可以说明这一点
fr = new FileReader("demo.txt");//demo.txt中的数据为:“abcdefg”
char [] buf = new char[3];
int num = 0;
while(fr.read(buf) != -1) {
System.out.println(new String(buf));
}
因为demo.txt文件中的字符串长度为7,buf的长度为3
所以读三次,就可以将demo.txt中的数据完全读出来
当你查看结果时,会发现,最后一行输出的是gde,而不是预期的g
这是因为在读取的字符在buf中是从左往右存的,第二次读取完后
buf中的为:def
第三次读:会将g写入第一个位置,接着没有数据了,退出循环
所以第三次读完buf中的数据为:gef
处理的方法为:只打印读取到的字符
int num = 0;
//num中存放的是读取的字符数
while((num=fr.read(buf)) != -1) {
//String(char[], 0, num)意思是将char[]里面下标从0到num的字符结合成字符串
System.out.print(new String(buf, 0, num));
}
希望能解决你的问题
|