日期:2014-05-20  浏览次数:20757 次

读取文本文件的问题
代码如下:
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();
                }
            }
        }
    }

}