2 liujie5248 liujie5248 于 2013.01.04 14:27 提问

请问怎样分批读取txt文件?

在做一个阅读器,当txt文件太大时,则读取该文件就很长时间没有响应,
不知怎样可以分批读取txt文件.

3个回答

hooopo
hooopo   2013.01.04 14:37

txt很难分页的,推荐使用数据库存储。

liujie5248
liujie5248   2013.01.07 14:26

请帮忙看看,这是我后面写了个方法,往后翻页可以,向前连续翻页不知道怎么弄.
有思路的请提供个,谢谢!

Vector string;// 读取到的字符串根据宽度和换行拆分成符合屏幕宽度的行
int begin = 0;// 从指定的位置读取txt文件

public void readTxtByPage(String fileName) {
        string.clear();
        FileReader fr  = null;
        BufferedReader br = null;
        try {
            fr = new FileReader(filePath + fileName);
            br = new BufferedReader(fr);
            br.skip(begin);
            String content = "";
            char ch;//读取内容的每个字符
            int line = 0;//加入到Vector的行数
            int w;//字的宽度
            int len;//readLine()方法一次读取的字符串长度(注意:readLine()方法会将每一行最后的换行符'\n'抹去)
            int start;//字符串太长而被截断的起始位置
            FontMetrics fm = paint.getFontMetrics();
            fontHeight = (int) Math.ceil(fm.descent - fm.top) + 2;
            pageLineNum = textHeight / fontHeight;
            float[] widths = new float[1];
            while ((content = br.readLine()) != null) {
                len = content.length();
                w = 0;
                start = 0;
                for (int i = 0; i < len; i++) {
                    ch = content.charAt(i);
                    paint.getTextWidths(String.valueOf(ch), widths);
                    w += Math.ceil(widths[0]);
                    if (w > textWidth) {
                        string.addElement(content.substring(start, i));
                        begin += (i - start);
                        start = i;
                        w = 0;
                        line++;
                        if (line >= pageLineNum) {
                            System.out.println("begin===>"+begin);
                            return;
                        }
                    }
                }
                string.addElement(content.substring(start));
                begin += (len + 2 - start);//需要把抹去的换行符'\n'2个字符加回来
                line++;
                if (line >= pageLineNum) {
                    return;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            try {
                br.close();
                fr.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return;
    }
suannai0314
suannai0314 你可以用编辑功能将你的最新动态更新到问题中的
大约 5 年之前 回复
LiDaming_and
LiDaming_and   2013.01.07 16:48

像你这样做的话,应该在后台线程中执行。先让阅读器休眠,当你想让线程再次开始阅读,然后再调用阅读器。这样就不会冻结UI,还可以分批读取bits。或者在onTouchEvent事件中通知线程。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!