请教各位前辈一个问题:
我在写一个数据库服务器日志的检查程序,寻找打开过,但100行之内没关闭的记录.遇到一个问题:简单的说,我逐行读取文件,有内外两层循环,当我外循环读到该文件第i行的时候,如何让内循环从该文件的第i+1行开始读?
代码已经写了,而且正确,但是如果文件稍大,那么计算量大的吓人,哪位给个好方法,谢谢.
import java.io.*;public class test
{
public static void main (String[] args)
{
try
{
FileReader fr1 = new FileReader("in.txt");
LineNumberReader br1 = new LineNumberReader(fr1);
FileWriter fw1 = new FileWriter("out.txt");
PrintWriter out1 = new PrintWriter(fw1);
String s1 = br1.readLine(); //逐行读日志
while ( s1 != null )
{
if((s1.indexOf("打开"))!=-1) //找出打开的
{
String ch1 = s1.substring(0,11); //得到打开的编号
//(编号不唯一,但正常来说,两个相同编号的打开之间肯定有一个关闭,否则数据库异常,我的代码就是找这些异常)
FileReader fr2 = new FileReader("in.txt");
LineNumberReader br2 = new LineNumberReader(fr2);
for(int i = 0; i < br1.getLineNumber(); i ++)
br2.readLine(); //问题在这里,虽然正确,但计算量超大
String s2 = br2.readLine();
int =0;
for(int j = 0; j < 100 && s2 != null; j ++)
{
if((s2.indexOf("关闭")!=-1)&&(s2.indexOf(ch1)!=-1)) //遇到编号相同且关闭,正常
{
=1;
break;
}
if((s2.indexOf("打开")!=-1)&&(s2.indexOf(ch1)!=-1)) //遇到编号相同且打开,异常
{
=0;
break;
}
s2 = br2.readLine();
}
if(!=1) //把异常的输出到out.txt
{
out1.println(s1);
}
br2.close();
fr2.close();
}
s1 = br1.readLine();
} out1.close();
fw1.close();
br1.close();
fr1.close();
}
catch (FileNotFoundException e1)
{
System.err.println("File not found");
}
catch (IOException e2)
{
e2.printStackTrace();
}
}
}昨天有个前辈说用()和reset(),小弟我不会用,各位前辈可以参考一下,谢谢帮忙
我在写一个数据库服务器日志的检查程序,寻找打开过,但100行之内没关闭的记录.遇到一个问题:简单的说,我逐行读取文件,有内外两层循环,当我外循环读到该文件第i行的时候,如何让内循环从该文件的第i+1行开始读?
代码已经写了,而且正确,但是如果文件稍大,那么计算量大的吓人,哪位给个好方法,谢谢.
import java.io.*;public class test
{
public static void main (String[] args)
{
try
{
FileReader fr1 = new FileReader("in.txt");
LineNumberReader br1 = new LineNumberReader(fr1);
FileWriter fw1 = new FileWriter("out.txt");
PrintWriter out1 = new PrintWriter(fw1);
String s1 = br1.readLine(); //逐行读日志
while ( s1 != null )
{
if((s1.indexOf("打开"))!=-1) //找出打开的
{
String ch1 = s1.substring(0,11); //得到打开的编号
//(编号不唯一,但正常来说,两个相同编号的打开之间肯定有一个关闭,否则数据库异常,我的代码就是找这些异常)
FileReader fr2 = new FileReader("in.txt");
LineNumberReader br2 = new LineNumberReader(fr2);
for(int i = 0; i < br1.getLineNumber(); i ++)
br2.readLine(); //问题在这里,虽然正确,但计算量超大
String s2 = br2.readLine();
int =0;
for(int j = 0; j < 100 && s2 != null; j ++)
{
if((s2.indexOf("关闭")!=-1)&&(s2.indexOf(ch1)!=-1)) //遇到编号相同且关闭,正常
{
=1;
break;
}
if((s2.indexOf("打开")!=-1)&&(s2.indexOf(ch1)!=-1)) //遇到编号相同且打开,异常
{
=0;
break;
}
s2 = br2.readLine();
}
if(!=1) //把异常的输出到out.txt
{
out1.println(s1);
}
br2.close();
fr2.close();
}
s1 = br1.readLine();
} out1.close();
fw1.close();
br1.close();
fr1.close();
}
catch (FileNotFoundException e1)
{
System.err.println("File not found");
}
catch (IOException e2)
{
e2.printStackTrace();
}
}
}昨天有个前辈说用()和reset(),小弟我不会用,各位前辈可以参考一下,谢谢帮忙
大家帮帮忙吧
这问题对各位高手来说并不复杂,而且只需要在我的代码基础上修改一下,不那么费劲的,还请大家帮我一下,小弟再次谢过了!!!