请教txt文件分页的问题? 一个大txt文本文件,10M左右的。如何进行分页,分页随着屏幕字体大小改变而改变?向前翻,向后翻如何计算读取多少字符?主要是往回翻请教思路有示例当然更好,谢谢了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 问题不清,看了她在j2me版问才明白 多少的话,要看你设定多大的自己,比如屏幕宽度是320px,那设定12px的话,每行可容纳320/12个字符,还要有留点空白吧,自己左右各减去5px,310/12个字符。也就是12px的话,你没读这些个字符就要打出换行符在继续读。 你可以问问这里的 楼主,他和你做的是一样的功能http://topic.csdn.net/u/20070525/13/02c8706d-0281-4044-bdc6-b2ebc0244740.html希望对你有帮助 可能会很慢:但只是初步思路:先br.readLine()+"\r\n"把所有的文本行存进StringBuffer分页应该是固定大小,字体大小发生变化,则行数也发生变化把所有的分页存进一个ArrayList比如说把分页作为一个Holder对象,这个对象应该存储的是开头字符在StringBuffer中的位置,和结尾字符在StringBuffer中的位置,然后要读的话,直接使用sb.substring(firstIndex,0,lastIndex-firstindex); 我来抛砖引玉package JavaSe;import java.io.BufferedReader;import java.io.FileReader;import java.io.IOException;import java.util.ArrayList;public class Book implements Device { final int RESOLUTION=480*320; int pageLine; ArrayList<Holder> list; StringBuffer sb; int page; /** * 通过字体大小,获取每页所需的行数 * @param font */ private void setPageLine(int font){ this.pageLine=RESOLUTION/font; } /** * 初始化 * @param fontSize * @param filePath * @throws IOException */ private void init(int fontSize,String filePath) throws IOException{ setPageLine(fontSize); ArrayList<Holder> list=new ArrayList<Holder>(); this.sb=getBook(filePath, list); this.list=list; } private void display(int page){ this.page=page; int first=list.get(page).first; int end=list.get(page).end; String str=sb.substring(first, (end-first)); display(str); } private void pageDown(){//上页 this.page-=1; int first=list.get(page).first; int end=list.get(page).end; String str=sb.substring(first, (end-first)); display(str); } private void pageUp(){//下页 this.page+=1; int first=list.get(page).first; int end=list.get(page).end; String str=sb.substring(first, (end-first)); display(str); } /** * 获取每个分页对应的在StringBuffer中的初索引和末索引 * @param filePath * @return * @throws IOException */ private StringBuffer getBook(String filePath,ArrayList<Holder> list) throws IOException{ StringBuffer sb=new StringBuffer(); BufferedReader br=new BufferedReader(new FileReader(filePath)); String temp; int i=1; Holder holder = null; int index=0; while((temp=br.readLine())!=null){ temp+="\r\n"; sb.append(temp); if(i%pageLine==1){ holder=new Holder(); holder.first=index; } index+=temp.length(); if(i%pageLine==0){ holder.end=index; list.add(holder); } i++; } if((i-1)%pageLine!=0){//如果最后多出了几个文本行,则单独作为分页 holder.end=index; list.add(holder); } return sb; } class Holder{ int first; int end; } @Override public void display(String str) { // TODO Auto-generated method stub }}主要实现类package JavaSe;public interface Device { void display(String str);}接口 请求帮助 java 一个java基础问题,望高手指教! classpath里能不能用通配符 * ? 请教大数据集分类的问题 我用ASP一年了,对C有点基础,但我打算开始JAVA,不知道我行不行啊?听说JAVA难,但一直都没接触过,希望前辈门指点一下 日期转换问题,如何把各种不同格式的日期转换到一样的格式。 关于客户端线程的问题,急救!!!!!在线等待!!帮忙!! 最近在看junit,有问题不太懂,求大牛解释解释 有谁写过图书馆系统程序?有这方面的参考资料吗? 请教一个openfire相关的问题,多谢赐教!!! 帮我看看我的自动关机程序有什么问题
先br.readLine()+"\r\n"把所有的文本行存进StringBuffer
分页应该是固定大小,字体大小发生变化,则行数也发生变化
把所有的分页存进一个ArrayList
比如说把分页作为一个Holder对象,这个对象应该存储的是开头字符在StringBuffer中的位置,和结尾字符在StringBuffer中的位置,然后要读的话,直接使用sb.substring(firstIndex,0,lastIndex-firstindex);
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;public class Book implements Device {
final int RESOLUTION=480*320;
int pageLine;
ArrayList<Holder> list;
StringBuffer sb;
int page;
/**
* 通过字体大小,获取每页所需的行数
* @param font
*/
private void setPageLine(int font){
this.pageLine=RESOLUTION/font;
}
/**
* 初始化
* @param fontSize
* @param filePath
* @throws IOException
*/
private void init(int fontSize,String filePath) throws IOException{
setPageLine(fontSize);
ArrayList<Holder> list=new ArrayList<Holder>();
this.sb=getBook(filePath, list);
this.list=list;
}
private void display(int page){
this.page=page;
int first=list.get(page).first;
int end=list.get(page).end;
String str=sb.substring(first, (end-first));
display(str);
}
private void pageDown(){//上页
this.page-=1;
int first=list.get(page).first;
int end=list.get(page).end;
String str=sb.substring(first, (end-first));
display(str);
}
private void pageUp(){//下页
this.page+=1;
int first=list.get(page).first;
int end=list.get(page).end;
String str=sb.substring(first, (end-first));
display(str);
}
/**
* 获取每个分页对应的在StringBuffer中的初索引和末索引
* @param filePath
* @return
* @throws IOException
*/
private StringBuffer getBook(String filePath,ArrayList<Holder> list) throws IOException{
StringBuffer sb=new StringBuffer();
BufferedReader br=new BufferedReader(new FileReader(filePath));
String temp;
int i=1;
Holder holder = null;
int index=0;
while((temp=br.readLine())!=null){
temp+="\r\n";
sb.append(temp);
if(i%pageLine==1){
holder=new Holder();
holder.first=index;
}
index+=temp.length();
if(i%pageLine==0){
holder.end=index;
list.add(holder);
}
i++;
}
if((i-1)%pageLine!=0){//如果最后多出了几个文本行,则单独作为分页
holder.end=index;
list.add(holder);
}
return sb;
}
class Holder{
int first;
int end;
} @Override
public void display(String str) {
// TODO Auto-generated method stub
}
}
主要实现类
package JavaSe;public interface Device {
void display(String str);
}接口