-1

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);

    }
}

私が間違っている場所で誰かが私を助けることができますか? 同様の質問をcoderanchにしましたが、ここで手がかりが非常に早く得られるので、ここでも質問します。申し訳ありません(クロスフォーラムの質問)。ありがとう。

4

1 に答える 1

0

「\example\mandar.txt」で見つかった「[stations]」ごとに 100,000 回ループします。

if (sCurrentline1.contentEquals(sb1) == true) {
    int count = a; 
    int arraycount = 100000;
    for(int i =0; i< (arraycount+1); i++){

fhe.insertintoExtensions を呼び出して、"\example\mandar.txt" を再度ループし、実際の行番号に達するまで、行の内容または s1 パラメーターの内容をコピーします。

while ((thisLine = in.readLine()) != null) {
    if(i == lineno) out.println(s1);
    out.println(thisLine);
    i++;
}

コードを改善し、PrintWriter の代わりに BufferedWriter を使用してください。

于 2013-03-27T20:42:00.370 に答える