首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

读取文本文件的有关问题

2012-04-10 
读取文本文件的问题代码如下:Java codepublic static void main(String[] args) {Reader rf nullint le

读取文本文件的问题
代码如下:

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();                }            }        }    }} 

热点排行