当前位置: 代码迷 >> J2SE >> 读取文本文件的有关问题
  详细解决方案

读取文本文件的有关问题

热度:181   发布时间:2016-04-24 01:31:48.0
读取文本文件的问题
代码如下:
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();                }            }        }    }}