txt文本处理分页功能的实现:
网上找了txt文本分页,实现小说阅读器的功能找了很久找不到自己想要的,所以自己实现一个专门处理txt文本分页功能的类.有人建议用randomAccessFile可以随机读取文本的任意位置,大文本也可以读,直接从这个类的方法上找可以实现自己想要的功能.
文本阅读器最重要的功能就是,我点击一个按钮或者滑动一下屏幕就可以是上一页或者下一页。
这个类应该公布两个方法得到上一页文本内容,得到下一页文本内容。
废话不多说直接上代码:
publicclassProcessText{
privatelongpages;//总页数
privatefinalintSIZE=900;//每一页的字节数字节数固定
privatelongbytescount;//字节总数
privatelongcurrentpage;//当前页面
privateRandomAccessFilereadFile;
//构造方法传入当前页为了实现书签的功能记录用户读取的文章位置
publicProcessText(Filefile,intcurrentpage){
try{
readFile=newRandomAccessFile(file,"r");
bytescount=readFile.length();//获得字节总数
pages=bytescount/SIZE;//计算得出文本的页数
this.currentpage=currentpage;
}catch(Exceptione){
e.printStackTrace();
}
}
//定位字节位置根据页数定位文本的位置
privatevoidseek(longpage){
try{
//if(pages)
readFile.seek(page*SIZE);
}catch(IOExceptione){
e.printStackTrace();
}
}
//固定读取SIZE+30个字节的内容为什么+30?
//读取的为字节需要进行转码转码不可能刚好转的就是文本内容,
//一页的末尾和开始出有可能乱码每一次多读30个字节是为了第一页乱码位置
//在第二页就可以正常显示出内容不影响阅读
privateStringread(){
//内容重叠防止末尾字节乱码
byte[]chs=newbyte[SIZE+30];
try{
readFile.read(chs);
}catch(IOExceptione){
e.printStackTrace();
}
returnnewString(chs,Charset.forName("utf-8"));
}
//上一页功能的实现
publicStringgetPre(){
Stringcontent=null;
//第一页的情况定位在0字节处读取内容当前页数不改变
if(currentpage<=1){
seek(currentpage-1);
content=read();
}else{
//其它页则定位到当前页-2处在读取指定字节内容例如当前定位到第二页的末尾2*SIZE上一页应该是第一页也就是从0位置开始读取SIZE个字节
seek(currentpage-2);
content=read();
currentpage=currentpage-1;
}
returncontent;
}
//下一页功能的实现
publicStringgetNext(){
Stringcontent=null;
if(currentpage>=pages){//当前页为最后一页时候,显示的还是最后一页
seek(currentpage-1);
content=read();
}else{
seek(currentpage);
content=read();
currentpage=currentpage+1;
}
returncontent;
}
}
如果觉得《android阅读器里的 txt 文本处理分页功能的实现:》对你有帮助,请点赞、收藏,并留下你的观点哦!