代码如下:
- Java code
public static void main(String[] args) { Reader rf = null; int length = 0; char[] ch = null; StringBuffer sb = new StringBuffer(); try { rf = new FileReader("e:/aa.txt"); ch = new char[1024]; length = rf.read(ch); while (length != -1) { sb.append(ch); // ch = new char[1024]; length = rf.read(ch); } System.out.println(sb.toString()); } catch (Exception e) { e.printStackTrace(); } }
假设 aa.txt 这个文本文件共有1500个字符,第一次读取,在ch数组里,填充了前1024个字符进去。
然后将这1024个字符添加到StringBuffer, 第二次读取时,会读取文本文件的后476个字符(1500-1024),
再次添加到ch数组里,但是此时,ch数组里,前476个字符是新添加的字符,后551个字符(1024-476)却是第一次添加时的旧的字符。
如何在添加前,清空掉这ch数组呢。
我现在的解决办法如注释那里,再次声明一个1024的数组。这个虽然可以暂时解决问题。但是如果文本文件很大的话,估计系统资源就飙上去了,java虚拟机应该不会立即释放掉空数据吧。
有没有办法可以让ch数组在添加到StringBuffer后,清空该数组的内容呢。或者其它的解决办法。
------解决方案--------------------
当你这种办法没发实现的时候,你可以考虑换种方式。
- Java code
public class Test { public static void main(String[] args){ BufferedReader reader = null; try { reader = new BufferedReader(new FileReader("")); StringBuffer sb = new StringBuffer(); while(true){ String line = reader.readLine(); if(line == null){ break; } sb.append(line); } System.out.println(sb.toString()); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally{ if(reader != null){ try { reader.close(); } catch (IOException e) { e.printStackTrace(); } } } }}