Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在最短的时间内通过java在txt文件中添加2lac行?_Java - Fatal编程技术网

如何在最短的时间内通过java在txt文件中添加2lac行?

如何在最短的时间内通过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

我试图通过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 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文件夹中。有人能帮助我如何在我的代码中使用,或者通过这个给定的示例,我如何在部分编写特定的行吗电话号码?