Filter阅读是我最近写的一个Android的阅读器,用于看英文的书(中文暂时不支持,会乱码,下一版再改).
本文章由”智障的我”原创,转载注明. http://blog.csdn.net/qq_29854305/article/details/52083648
在这里开源给大家(Android studio的)
源码下载地址:http://pan.baidu.com/s/1bpvAzIv
apk下载地址:http://shouji.baidu.com/software/9736272.html
主要难点有三个
**1,读取书籍文件
2,点击单词选择并翻译
3,文件的分页和记录上次的位置**
一个一个说.
1,读取书籍文件
首先直接调用系统的文件管理器,获取到书籍文件的地址.
这里有一点需要注意.通过文件管理器获取到的地址是File:///+地址格式的.需要我们截取一下.然后就得到了正确的文件地址
然后就是解析文件内容,这里我用的是FileChannel类,也就是文件通道类.
Java NIO中的FileChannel是一个连接到文件的通道。可以通过文件通道读写文件。
这个类的好处是效率高,占用少,而且最大读取单个文件可以到2G,还有就是能自由的决定从哪里开始读取(这就解决了记住上次读书位置和跳转的问题).所以我们用这个类
具体代码如下:
public class AnalysisTXTBook extends AnalysisBook {
private RandomAccessFile aFile;
private FileChannel fc;
private MappedByteBuffer out;
public AnalysisTXTBook(String path) {
try {
// 这个类是随机读取文件的类 可以从任意位置读文件
aFile = new RandomAccessFile(path, "rw");
// 文件通道 直接强行把存储内的文件放到内存中 效率高 最大单个文件能达到2G
fc = aFile.getChannel();
//获取所读文件的字符数
bookLength = aFile.length();
//映射到MappedByteBuffer上
out = fc.map(FileChannel.MapMode.READ_WRITE, 0, aFile.length());
Logger.d("aFile.length():" + aFile.length());
// 一定要关上
fc.close();
aFile.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public String getBookContent(int start, int lenth) {
String s =