如何在最短的时间内通过java在txt文件中添加2lac行?
我试图通过java程序在特定的txt文件(实际上是conf文件)中添加几乎2lac行。但当这个数字只有189000时,几乎需要112分钟! 我为此编写了以下代码如何在最短的时间内通过java在txt文件中添加2lac行?,java,Java,我试图通过java程序在特定的txt文件(实际上是conf文件)中添加几乎2lac行。但当这个数字只有189000时,几乎需要112分钟! 我为此编写了以下代码 import java.io.*; public class Fileshandling_example { static long s1; static long e1; static long e2; static Fileshandling_example fhe= new Fileshandli
import java.io.*;
public class Fileshandling_example {
static long s1;
static long e1;
static long e2;
static Fileshandling_example fhe= new Fileshandling_example();
public static void main(String args[]) {
try {
s1 = System.nanoTime();
File file1 = new File("\example\mandar.txt");
LineNumberReader lnr1 = new LineNumberReader(new FileReader(file1));
BufferedReader br1 = new BufferedReader(new FileReader(file1));
lnr1.skip(Long.MAX_VALUE);
int a = 1;
StringBuffer sb1 = new StringBuffer("[stations]");
String sCurrentline1 = br1.readLine();
while ((sCurrentline1 = br1.readLine()) != null) {
a++;
if (sCurrentline1.contentEquals(sb1) == true) {
int count = a;
int arraycount = 100000;
for(int i =0; i< (arraycount+1); i++){
if(0 == (i%10000)){
e2 = System.nanoTime();
System.out.println("Time = "+(e2-s1));
}
String abc ="extern => 00"+(1000 + (arraycount-i))+",1,Wait(0.05)";
fhe.insertintoExtensions(file1, (count+1),abc);
}
}
}
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
e1 = System.nanoTime();
System.out.println("Time = "+(e1-s1));
}
public void insertintoExtensions(File inFile1, int lineno, String s1)throws Exception {
File outFile1 = new File("\example\111.tmp");
FileInputStream fis = new FileInputStream(inFile1);
BufferedReader in = new BufferedReader(new InputStreamReader(fis));
FileOutputStream fos = new FileOutputStream(outFile1);
PrintWriter out = new PrintWriter(fos);
String thisLine = "";
int i =1;
while ((thisLine = in.readLine()) != null) {
if(i == lineno) out.println(s1);
out.println(thisLine);
i++;
}
out.flush();
out.close();
in.close();
inFile1.delete();
outFile1.renameTo(inFile1);
}
}
import java.io.*;
公共类文件处理示例{
静态长s1;
静态长e1;
静态长e2;
静态文件处理示例fhe=新文件处理示例();
公共静态void main(字符串参数[]){
试试{
s1=System.nanoTime();
File file1=新文件(“\example\mandar.txt”);
LineNumberReader lnr1=新的LineNumberReader(新文件读取器(文件1));
BufferedReader br1=新的BufferedReader(新文件读取器(文件1));
lnr1.跳过(长最大值);
INTA=1;
StringBuffer sb1=新的StringBuffer(“[站点]”);
字符串sCurrentline1=br1.readLine();
而((sCurrentline1=br1.readLine())!=null){
a++;
if(sCurrentline1.contentEquals(sb1)==true){
整数计数=a;
int arraycount=100000;
对于(int i=0;i<(arraycount+1);i++){
如果(0==(i%10000)){
e2=系统.nanoTime();
System.out.println(“Time=“+(e2-s1));
}
字符串abc=“extern=>00”+(1000+(arraycount-i))+”,1,Wait(0.05)”;
插入扩展(文件1,(计数+1),abc);
}
}
}
}捕获(IOE异常){
e、 printStackTrace();
}捕获(例外e){
e、 printStackTrace();
}
e1=System.nanoTime();
System.out.println(“Time=“+(e1-s1));
}
公共void insertintoExtensions(文件inFile1、int-lineno、字符串s1)引发异常{
File outFile1=新文件(“\example\111.tmp”);
FileInputStream fis=新的FileInputStream(infie1);
BufferedReader in=新的BufferedReader(新的InputStreamReader(fis));
FileOutputStream fos=新的FileOutputStream(outFile1);
PrintWriter out=新的PrintWriter(fos);
字符串thisLine=“”;
int i=1;
而((thisLine=in.readLine())!=null){
如果(i==lineno)out.println(s1);
out.println(此行);
i++;
}
out.flush();
out.close();
in.close();
inFile1.delete();
排水管1.重命名(填充1);
}
}
谁能帮我找出哪里错了?
我问了类似的问题,但在这里我得到线索非常快,所以我也问这里。
抱歉(跨论坛询问)。
谢谢。在“\example\mandar.txt”上找到的每一个“[stations]”都会循环100000次:
if(sCurrentline1.contentEquals(sb1)==true){
整数计数=a;
int arraycount=100000;
对于(int i=0;i<(arraycount+1);i++){
并再次调用fhe.insertintotextensions循环“\example\mandar.txt”以复制或删除行的内容或s1参数的内容,直到达到实际行号:
while((thisLine=in.readLine())!=null){
如果(i==lineno)out.println(s1);
out.println(此行);
i++;
}
尝试改进您的代码并使用BufferedWriter而不是PrintWriter。请理解lac不是一个常见的词。您应该在这里使用20万。为什么要创建和删除这么多临时文件?您的代码很混乱。变量
a
用于什么?使用的是count
什么?尝试添加comments和使用名称来帮助解释您的代码试图做什么。感谢DiogoSantana,我在的帮助下按照您说的做了,但我做不好。您能帮我更多吗?当然。但您需要做更多的家庭作业。调试您的代码,想一个更好的方法来实现您的目标,当您感到困惑时,您可以问一个更具体的问题。你会问为什么这段代码很慢。答案就在那里。如何让它变快这只是改变代码逻辑以避免100000次循环的问题。再次感谢你,我发现我在几秒钟内尝试了给定的代码,它写了大量的数据,但它存储在tmp文件夹中。有人能帮助我如何在我的代码中使用,或者通过这个给定的示例,我如何在部分编写特定的行吗电话号码?