-1

私は2つのテキストファイルの違いを見つけようとしていて、違いを3番目のファイルに書き込もうとしています!!! 私はそれを行うのに非常に成功していますが、ファイルが大きすぎて200000行近くあり、それをarrylistに保存すると、6482行目までのデータしか保存されません.なぜそれが起こっているのかわかりません. 誰でもそれで私を助けてもらえますか? これが私のコードです

    import java.io.*;


    import java.io.*;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Scanner;

    public class SearchThe {
    public static void main(String args[]) {
        try {
            // Open the file c:\test.txt as a buffered reader


                      Scanner s = new Scanner(new File("D://abc.txt"));
                      Scanner s2 = new Scanner(new File("D://xyz.txt"));
//                       Scanner s = new Scanner(new File("D://file1.txt"));
//                      Scanner s2 = new Scanner(new File("D://file2.txt"));
                    ArrayList<String> file1_list = new ArrayList() ;
                    ArrayList<String> file2_list = new ArrayList();
//                    file1_list.ensureCapacity(193225);
//                     file2_list.ensureCapacity(193225);
                    while (s.hasNext()) {
                        file1_list.add(s.next());

                    }
                    s.close();
                    while (s2.hasNext()) {
                        file2_list.add(s2.next());
                    }
                    s2.close();
                     FileWriter stream = new FileWriter("D://file1_copy.csv");
                          BufferedWriter abc = new BufferedWriter(stream);
                    for(int i=0;i<file1_list.size();i++)
                    {
                        System.out.println("File 1 data" +file1_list.get(i));
                         abc.write(file1_list.get(i));abc.newLine();

                    }
                    abc.close();
//                   

            // Start a line count and declare a string to hold our current 
            int linecount = 0;
                String line;

            // Let the user know what we are searching for

//                      for(int i=0;i<file1_list.size();i++)
//                      {   // Loop through each line, stashing the line into our line     
                         FileWriter fstream = new FileWriter("D://result.txt");
                          BufferedWriter out = new BufferedWriter(fstream);
                          for(int j =0;j<file1_list.size();j++)
                          {

                          System.out.println("\n\nSearching for  " + file1_list.get(j) + "  in file 1...");



                           if(file2_list.contains(file1_list.get(j)))
                           {
                               System.out.println(file1_list.get(j) +"   found in a file 2");

                           }
                           else
                           {
                               System.out.println(file1_list.get(j) +"  not found in a file 1 ");
                               out.write(file1_list.get(j));out.newLine();

                           }

                      }
                          out.close();



        }
        catch (IOException e) {
            System.out.println("IO Error Occurred: " + e.toString());
        }
    }
}
4

2 に答える 2

0

空きメモリを確認したところ、

空きメモリ69476304

それは問題ではありません、あなたは正しかったです。そして、行6482の後に空白もあります。私は何が問題なのか理解できません:(

于 2013-01-31T19:48:13.423 に答える
0

デフォルトでは、スキャナーは空白区切り文字を使用します。行番号 6482 の後に空白がありますか。最後のトークンが行番号 6482 の後にファイル全体を返していないかどうかを確認してください。

空白区切り文字に問題がない場合は、Java ランタイムの空きメモリを確認してください。

ランタイム rt = Runtime.getRuntime(); 長い freeMem = rt.freeMemory();

メモリが問題にならないことを願っています.32ビットプロセスモデルの場合、プロセスの最大仮想アドレスサイズは約4 GBです。しかし、確認した方がよいでしょう。うまくいけば、それはあなたの問題へのポインタを与えるでしょう.

于 2013-01-31T19:33:01.370 に答える