1、javaI/O中通过字符流读取文件并输出浅析(上) 昨晚无意写了一个java读取文件并输出到控制台的代码---因为操作的文件中包含汉字,所有用到了字符流InputStreamReader。但是意外的是:当我把读取的文档输出到后台后发现,输出的内容尾部多出了很多类似‘口口口口口口口口口口口口’的无用东东。怎么回事呢?难道代码有问题? 重新查看代码如下:import java.io.File;import java.io.FileInputStream;import java.io.InputStreamReader;public class Test3{ publ
2、ic static void main(String[]args){ try { FilesourceFile= new File("D:\ERROR.log"); FileInputStreamfin= new FileInputStream(sourceFile); InputStreamReaderris= new InputStreamReader(fin); int len=(int)sourceFile.length(); char[]aa= new c
3、har[len]; while (ris.read()>0){ ris.read(aa); } ris.close(); fin.close(); for (int i=0;i
4、kTrace(); } }} 代码非常简单:首先创建了输入流对象InputStreamReader,然后创建了char类型的数组aa,其长度就是文件的length;再循环读取字符放入数组中,结束后打印数组内容到控制台。 很明显,输出错误是因为数组没有被填充满---就是说预定义的数组长度是过长的。但是我明明是按照文件的length来定义的长度呀。难道文件的length和读取的字符数是不相等的? 验证一把,修改部分地方如下:while (ris.read()>0){ int ss=ris.read(aa);
5、 System.out.println(ss); } System.out.println(aa.length); 此时,我打印了读取的实际的字符长度和数组长度,发现:实际的读取的字符长度是1461,而数组长度是1584。原来问题出在这!!! 修改后完整代码如下:import java.io.File;import java.io.FileInputStream;import java.io.InputStreamReader;public class Test4{ public static void main(String
6、[]args){ try { FilesourceFile= new File("D:\ERROR.log"); FileInputStreamfin= new FileInputStream(sourceFile); InputStreamReaderris= new InputStreamReader(fin); int cc; while ((cc=ris.read())>0){ System.out.print((char)cc);