日期:2014-05-20  浏览次数:20762 次

大家好,请问大家一个问题,怎么从外部txt文件中分段读取数据啊?
我的源代码是这样的,但是不知道怎么从外部txt文件中分段读取数据,我想分页显示txt文件中的信息,分段读取可能更有效率!大家帮帮忙啊!
protected   String   loadText(String   url)   //读取a.txt文件获得记事本信息
{
String   returnString   =   null;

InputStream   is   =   this.getClass().getResourceAsStream(url);
if   (is   !=   null)
{
ByteArrayOutputStream   baos   =   new   ByteArrayOutputStream();
int   ch   =   0;
try  
{
while   ((ch   =   is.read())   !=   -1)
{
baos.write(ch);
}
byte[]   data   =   baos.toByteArray();
returnString   =   new   String(data, "UTF-8 ");
is.close();
baos.close();
}
catch   (IOException   e)  
{
e.printStackTrace();
return   " ";
}
}

if(returnString   !=   null)
{
return   returnString;
}
else
{
return   " ";
}
}


------解决方案--------------------
没有必要去while循环读取数据.如果要分段读取,直接skip就可以了.
不过你的文件最好是二进制文件,而不是一个单纯的文本文件.
你可以用程序生成这个二进制文件,简单举例来说,就是象一个文件里writeUTF很多个字串.
最好也在文件里存下每个字串的偏移量.
我用的方法如下:
//strfile 要读取的文件名字,offid是字串存储信息在文件中的顺序编号.
public static String getString(String strfile,int offid)
{
try
{
InputStream inputstream = " ".getClass().getResourceAsStream(strfile);
DataInputStream dis = new DataInputStream(inputstream);
dis.skipBytes(offid * 2);//偏移一定长度,读取文字存储位置的相关信息.
short strlen = dis.readShort();//读取文字在文件中的具体偏移量
dis.skipBytes(strlen - offid * 2 - 2);//跳过偏移量和位置信息的长度,直接读取字串
String s = dis.readUTF();
dis.close();
dis = null;

return s;
}
catch (IOException ioexception)
{
return null;
}
}

看了这个方法,就应该知道如何生成这个二进制文件了吧,呵呵.
这样的话,就不需要每次将文件全部导入heap,只需要按段读取文字就可以了.


saltedfish