本人用 Java读入按行读入文件。文件大小17.823M 纯文本文件,文件309310行
读了将近1个小时,居然读不完,怎么回事?
另外Java有没有函数可以一次性将文件入读?代码如下
//===============================================
FileReader fr = new FileReader(strFile+strFeedno);
BufferedReader br = new BufferedReader(fr);
String strLine = "";
String strDoc = "";
while((strLine = br.readLine()) != null)
{
strDoc = strDoc + strLine + "\n";
//System.out.println(strLine);
}
// --XXXXXX
if( fr != null ) fr.close();
if( br != null ) br.close();
//=================================================
读了将近1个小时,居然读不完,怎么回事?
另外Java有没有函数可以一次性将文件入读?代码如下
//===============================================
FileReader fr = new FileReader(strFile+strFeedno);
BufferedReader br = new BufferedReader(fr);
String strLine = "";
String strDoc = "";
while((strLine = br.readLine()) != null)
{
strDoc = strDoc + strLine + "\n";
//System.out.println(strLine);
}
// --XXXXXX
if( fr != null ) fr.close();
if( br != null ) br.close();
//=================================================
是因为你把读出来的每行放到了String里了。太耗内存了,程序卡了。还有拼接字符串用StringBuffer效率高一些。
你把这个文件读出来的目的是要干什么?可以分次读,处理完了再接着读。或者用内存映射。
总之,别一次性的处理。
其实你文件并不算太大,先改下StringBuffer试试。
public static int getLocalFileRow(String localFile) {
int localCount = 0;
try {
File file = new File(localFile);
BufferedReader buffer = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
while(buffer.readLine()!=null){
++localCount; //获得本地文件记录的行数
}
buffer.close();
} catch (Exception e) {
}
System.out.println(localFile+"有"+localCount+"行");
return localCount;
}
你可以在while里打个System.ou.println(count);//count为计数器
看看他是卡到哪里了
看似是字符串拼接的耗时,但是String的+在运行时也会转成StringBuffer的append操作。