Android 逐行比较两个文件的内容 公共类MainActivity扩展活动{ 文件输出流; FileInputStream fOne,fTwo; ArrayList arr1=新的ArrayList(); ArrayList arr2=新的ArrayList(); ArrayList words=新的ArrayList(); ArrayList wordsTwo=新的ArrayList(); 整数计数=0; int countTwo=0; int countThree=0; @凌驾 创建时受保护的void(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); 按钮fileOne=(按钮)findViewById(R.id.file1); 按钮fileTwo=(按钮)findviewbyd(R.id.file2); 按钮比较=(按钮)findViewById(R.id.compare); arr1.添加(“1”); arr1.添加(“2”); arr1.添加(“3”); arr1.添加(“4”); //arr1.添加(“3”); arr2.添加(“1”); arr2.添加(“2”); setOnClickListener(新的OnClickListener(){ @凌驾 公共void onClick(视图v){ //TODO自动生成的方法存根 尝试 { fos=openFileOutput(“File1”,Context.MODE_PRIVATE); 对于(int-temp=0;temp

Android 逐行比较两个文件的内容 公共类MainActivity扩展活动{ 文件输出流; FileInputStream fOne,fTwo; ArrayList arr1=新的ArrayList(); ArrayList arr2=新的ArrayList(); ArrayList words=新的ArrayList(); ArrayList wordsTwo=新的ArrayList(); 整数计数=0; int countTwo=0; int countThree=0; @凌驾 创建时受保护的void(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); 按钮fileOne=(按钮)findViewById(R.id.file1); 按钮fileTwo=(按钮)findviewbyd(R.id.file2); 按钮比较=(按钮)findViewById(R.id.compare); arr1.添加(“1”); arr1.添加(“2”); arr1.添加(“3”); arr1.添加(“4”); //arr1.添加(“3”); arr2.添加(“1”); arr2.添加(“2”); setOnClickListener(新的OnClickListener(){ @凌驾 公共void onClick(视图v){ //TODO自动生成的方法存根 尝试 { fos=openFileOutput(“File1”,Context.MODE_PRIVATE); 对于(int-temp=0;temp,android,file,Android,File,上面是写和读文件的代码。我在这里做的是,写两个文件并读取内容。现在我必须逐行比较文件的内容。需要做什么 尝试使用java.util.Scanner public class MainActivity extends Activity { FileOutputStream fos; FileInputStream fOne, fTwo; ArrayList<String> arr1 = new ArrayList<String>(); A

上面是写和读文件的代码。我在这里做的是,写两个文件并读取内容。现在我必须逐行比较文件的内容。需要做什么

尝试使用
java.util.Scanner

public class MainActivity extends Activity {


    FileOutputStream fos;
    FileInputStream fOne, fTwo;
    ArrayList<String> arr1 = new ArrayList<String>();
    ArrayList<String> arr2 = new ArrayList<String>();

    ArrayList<String> words = new ArrayList<String>();
    ArrayList<String> wordsTwo = new ArrayList<String>();
    int count = 0;
    int countTwo = 0;
    int countThree = 0;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button  fileOne = (Button)findViewById(R.id.file1);
        Button  fileTwo = (Button)findViewById(R.id.file2);
        Button  compare = (Button)findViewById(R.id.compare);
        arr1.add("1");
        arr1.add("2");
        arr1.add("3");
        arr1.add("4");
        //arr1.add("3");

        arr2.add("1");
        arr2.add("2");


        fileOne.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                try
                {
                    fos = openFileOutput("File1", Context.MODE_PRIVATE);

                    for(int temp = 0; temp< arr1.size(); temp++)
                    {
                        fos.write((arr1.get(temp).getBytes()) );
                        fos.write(System.getProperty("line.separator").getBytes());

                    }
                    fos.close();
                    fos.flush();

                }

                catch(Exception e)
                {

                }
            }
        });


        fileTwo.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                try
                {
                    fos = openFileOutput("File2", Context.MODE_PRIVATE);

                    for(int temp = 0; temp< arr2.size(); temp++)
                    {
                        fos.write((arr2.get(temp).getBytes()) );
                        fos.write(System.getProperty("line.separator").getBytes());

                    }
                    fos.close();
                    fos.flush();

                }

                catch(Exception e)
                {

                }
            }
        });

        compare.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                try
                {
                    fOne = openFileInput("File1");
                    fTwo = openFileInput("File2");
                } catch (FileNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                Scanner scanFile = new Scanner(new DataInputStream(fOne));
                Scanner scanFileT = new Scanner(new DataInputStream(fTwo));
                words = new ArrayList<String>();
                wordsTwo = new ArrayList<String>();

                while (scanFile.hasNextLine())
                {
                    if(scanFile.nextLine()!=null)
                    {
                        count++;
                    }

                    while(scanFileT.hasNextLine())
                    {
                        if(scanFileT.nextLine()!=null)
                        {
                            countTwo++;

                        }
                    }
                }

                try 
                {
                    fOne.close();
                    fTwo.close();
                    scanFile.close();
                    scanFileT.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }


                Toast.makeText(getBaseContext(), "One : " + count, 1000).show();
                Toast.makeText(getBaseContext(), "Two : " + countTwo, 1000).show();
                Toast.makeText(getBaseContext(), "Three : " + countThree, 1000).show();
                count = 0 ;                         
                countTwo = 0;
                countThree = 0;
            }
        });
    }



}

尝试使用
java.util.Scanner

public class MainActivity extends Activity {


    FileOutputStream fos;
    FileInputStream fOne, fTwo;
    ArrayList<String> arr1 = new ArrayList<String>();
    ArrayList<String> arr2 = new ArrayList<String>();

    ArrayList<String> words = new ArrayList<String>();
    ArrayList<String> wordsTwo = new ArrayList<String>();
    int count = 0;
    int countTwo = 0;
    int countThree = 0;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button  fileOne = (Button)findViewById(R.id.file1);
        Button  fileTwo = (Button)findViewById(R.id.file2);
        Button  compare = (Button)findViewById(R.id.compare);
        arr1.add("1");
        arr1.add("2");
        arr1.add("3");
        arr1.add("4");
        //arr1.add("3");

        arr2.add("1");
        arr2.add("2");


        fileOne.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                try
                {
                    fos = openFileOutput("File1", Context.MODE_PRIVATE);

                    for(int temp = 0; temp< arr1.size(); temp++)
                    {
                        fos.write((arr1.get(temp).getBytes()) );
                        fos.write(System.getProperty("line.separator").getBytes());

                    }
                    fos.close();
                    fos.flush();

                }

                catch(Exception e)
                {

                }
            }
        });


        fileTwo.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                try
                {
                    fos = openFileOutput("File2", Context.MODE_PRIVATE);

                    for(int temp = 0; temp< arr2.size(); temp++)
                    {
                        fos.write((arr2.get(temp).getBytes()) );
                        fos.write(System.getProperty("line.separator").getBytes());

                    }
                    fos.close();
                    fos.flush();

                }

                catch(Exception e)
                {

                }
            }
        });

        compare.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                try
                {
                    fOne = openFileInput("File1");
                    fTwo = openFileInput("File2");
                } catch (FileNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                Scanner scanFile = new Scanner(new DataInputStream(fOne));
                Scanner scanFileT = new Scanner(new DataInputStream(fTwo));
                words = new ArrayList<String>();
                wordsTwo = new ArrayList<String>();

                while (scanFile.hasNextLine())
                {
                    if(scanFile.nextLine()!=null)
                    {
                        count++;
                    }

                    while(scanFileT.hasNextLine())
                    {
                        if(scanFileT.nextLine()!=null)
                        {
                            countTwo++;

                        }
                    }
                }

                try 
                {
                    fOne.close();
                    fTwo.close();
                    scanFile.close();
                    scanFileT.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }


                Toast.makeText(getBaseContext(), "One : " + count, 1000).show();
                Toast.makeText(getBaseContext(), "Two : " + countTwo, 1000).show();
                Toast.makeText(getBaseContext(), "Three : " + countThree, 1000).show();
                count = 0 ;                         
                countTwo = 0;
                countThree = 0;
            }
        });
    }



}

将while循环更改为以下内容:

  while (sc1.hasNext() && sc2.hasNext()) {
        String str1 = sc1.next();
        String str2 = sc2.next();
        if (!str1.equals(str2))
            System.out.println(str1 + " != " + str2);
    }
根据文件的大小,我建议您进行一些优化,比如在逐行检查文件大小之前检查文件大小

总体逻辑如下:;如果两者都有另一条线,比较一下看是否相等。如果它们没有其他行,请检查其中一个是否还有行,如果有,则它们不相等

更新 在chat中阐明了比较的目的后,请参见对该问题的评论,我得出的结论是,另一种比较更有效,而且事实上是正确的。如果比较文本的结构,上面的比较算法非常有效,但如果比较可能排序或可能不排序的数据向量,则不起作用。经过一些讨论,我们得出结论,数据需要排序,否则比较将使复杂性至少降低到
O(n^2)
,如果对数据进行排序,这可以在
O(2n)
中完成。这里是算法的框架:

while (scanFile.hasNextLine() && scanFileT.hasNextLine())
{
    if(scanFileT.nextLine().equals(scanFile.nextLine()))
    {
        // The lines are equal.
    } else {
        // The lines are not equal.
    }
}

if(scanFile.hasNextLine() || scanFileT.hasNextLine())
{
    // If more lines remain in one of the files, they are not equal.
} else {
    // If no content remains in both files, they are equal.
}
然而,我个人认为,对许多假设进行修改是不好的。我建议将好友保存在
集合
,例如
树集合
。然后,序列化对象,而不是手动将其写入文件。集合是整洁的,因为它们包含几个有趣的对象。例如,您可以轻松地使用以下代码从所有好友集中删除组中的所有好友:

if(! scanGroupFriends.hasNextLine())
{
    //simple sanity check to see if we need to compare at all. In this case, add all friends.
} else {
    String nextFriend = scanGroupFriends.nextLine();

    while(scanAllFriends.hasNextLine())
    {
        if(scanAllFriends.nextLine().equals(nextFriend))
        {
            // Friend already figures, do not add him and advance the list of group friends.
            if(scanGroupFriends.hasNextLine())
            {
                nextFriend = scanGroupFriends.nextLine();
            } else {
                // There are no more friends in the group, add all remaining friends to list to show.
                break; // Terminate the `while` loop.
            }
        }
    }
}
怎么
private void compareFiles() throws Exception {

    String s1 = "";
    String s2 = "", s3 = "", s4 = "";
    String y = "", z = "";

    // Reading the contents of the files
    BufferedReader br = new BufferedReader(new InputStreamReader(
            getAssets().open("first.txt")));
    BufferedReader br1 = new BufferedReader(new InputStreamReader(
            getAssets().open("second.txt")));

    while ((z = br1.readLine()) != null) {
        s3 += z;
        s3 += System.getProperty("line.separator");
    }

    while ((y = br.readLine()) != null) {
        s1 += y;
        s1 += System.getProperty("line.separator");
    }

    // String tokenizing
    StringTokenizer st = new StringTokenizer(s1);
    String[] a = new String[10000];
    for (int l = 0; l < 10000; l++) {
        a[l] = "";
    }
    int i = 0;
    while (st.hasMoreTokens()) {
        s2 = st.nextToken();
        a[i] = s2;
        i++;
    }

    StringTokenizer st1 = new StringTokenizer(s3);
    String[] b = new String[10000];
    for (int k = 0; k < 10000; k++) {
        b[k] = "";
    }
    int j = 0;
    while (st1.hasMoreTokens()) {
        s4 = st1.nextToken();
        b[j] = s4;
        j++;
    }

    // comparing the contents of the files and printing the differences, if
    // any.
    int x = 0;
    for (int m = 0; m < a.length; m++) {
        if (a[m].equals(b[m])) {
        } else {
            x++;
            Log.d("Home", a[m] + " -- " + b[m]);
        }
    }
    Log.d("Home", "No. of differences : " + x);
    if (x > 0) {
        Log.d("Home", "Files are not equal");
    } else {
        Log.d("Home", "Files are equal. No difference found");
    }
}
int x = 0;
for (int m = 0; m < a.length; m++) {
    if (a[m].equals(b[m])) {
    } else {
        x++;
        Log.d("Home", a[m] + " -- " + b[m]);
        //to print difference   
        if (a[m].length() < b[m].length())
            Log.d("Home", "" + StringUtils.difference(a[m], b[m]));
        else
            Log.d("Home", "" + StringUtils.difference(b[m], a[m]));
    }       
}