码迷,mamicode.com
首页 > 编程语言 > 详细

java 判断两个文件是否相同

时间:2015-05-22 19:32:24      阅读:322      评论:0      收藏:0      [点我收藏+]

标签:判断相同文件   过滤相同文件   

使用java 如何判断两个文件是否相同呢?

我的做法是

(1)先比较两个文件内容的长度;

(2)在长度相同的情况下,再比较两个文件的MD5值。

技术分享


【create md5】按钮用于记录source file的文件内容长度和MD5值。

运行主类:CheckSameApp

package com.hw.main;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;

import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

import com.common.util.SystemUtil;
import com.swing.dialog.DialogUtil;
import com.swing.messagebox.GUIUtil23;

public class CheckSameApp extends JFrame
{
        private static final long serialVersionUID = 1644076682819874235L;
        private JTextField                sourceFileTF;
        private JButton                     browserSourceBtn;
        private JTextField                targetFileTF;
        private JButton                     createmd5Button    = null;
        private JButton                     checkmd5Btn            = null;
        private JButton                     browserTargetBtn = null;
        /***
         * MD5 of last file
         */

        private String                        result                     = null;
        private long                            size_of_file         = 0;
        private JButton                     compareBtn             = null;
        private File                            srcfile                    = null;
        private File                            targfile                 = null;
        protected static String     MESG_DIFF                = "[failed:] they are different";
        protected static String     MESG_SAME                = "[successfully:] they are same completely";

        public static void main(String[] args)
        {
                CheckSameApp app = new CheckSameApp();
                app.launchFrame();
        }

        public void launchFrame()
        {
                this.setTitle("Compare two files by MD5");
                Dimension screensize = Toolkit.getDefaultToolkit().getScreenSize();
                this.setSize(700, 200);
                Dimension framesize = this.getSize();
                int x = (int) screensize.getWidth() / 2 - (int) framesize.getWidth()
                        / 2;
                int y = (int) screensize.getHeight() / 2 - (int) framesize.getHeight()
                        / 2;
                this.setLocation(x, y);
                Container c = this.getContentPane();
                layout(c);
                this.setVisible(true);
                this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }

        /***
         * setting menu
         */

        

        public void layout(Container c)
        {
                //                setMenu2();
                JPanel mainPane = new JPanel();
                GridBagLayout gridBagLayout = new GridBagLayout();
                gridBagLayout.columnWidths = new int[]
                { 20, 80/*between source file and text field*/, 300, 60, 0 };
                gridBagLayout.rowHeights = new int[]
                { 17, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0 };
                gridBagLayout.columnWeights = new double[]
                { 0.0, 0.0, 1.0, 1.0, Double.MIN_VALUE };
                gridBagLayout.rowWeights = new double[]
                { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0,
                        Double.MIN_VALUE };

                mainPane.setLayout(gridBagLayout);
                JLabel ftpServerLb = new JLabel("source file");
                GridBagConstraints gbc_setConnectionsLabel = new GridBagConstraints();
                gbc_setConnectionsLabel.anchor = GridBagConstraints.WEST;
                gbc_setConnectionsLabel.insets = new Insets(0, 0, 5, 5);
                gbc_setConnectionsLabel.gridx = 1;
                gbc_setConnectionsLabel.gridy = 1;
                mainPane.add(ftpServerLb, gbc_setConnectionsLabel);
                //                dialog.add(ftpserverTF);

                sourceFileTF = new JTextField();
                if (!SystemUtil.isWindows)
                {
                        sourceFileTF.setText("/home/whuang2/bin/ab.txt");
                }
                else
                {
                        sourceFileTF.setText("");
                }
                GridBagConstraints gbc_connectionsTF = new GridBagConstraints();
                gbc_connectionsTF.fill = GridBagConstraints.HORIZONTAL;
                gbc_connectionsTF.insets = new Insets(0, 0, 5, 5);
                gbc_connectionsTF.gridx = 2;
                gbc_connectionsTF.gridy = 1;
                mainPane.add(sourceFileTF, gbc_connectionsTF);

                browserSourceBtn = new JButton("browser source");
                GridBagConstraints gbc_browserSourceBtn = new GridBagConstraints();
                gbc_browserSourceBtn.fill = GridBagConstraints.EAST;
                gbc_browserSourceBtn.insets = new Insets(0, 0, 5, 5);
                gbc_browserSourceBtn.gridx = 3;
                gbc_browserSourceBtn.gridy = 1;
                mainPane.add(browserSourceBtn, gbc_browserSourceBtn);
                browserSourceBtn.addActionListener(new ActionListener()
                {
                        @Override
                        public void actionPerformed(ActionEvent e)
                        {
                                //                                System.out.println("source");
                                boolean isSuccess = DialogUtil.browser3(sourceFileTF,
                                        JFileChooser.FILES_ONLY, CheckSameApp.this);
                                //                                if (isSuccess)
                                //                                {
                                //                                        targetFileTF.setText(SystemUtil.getParentDir(sourceFileTF
                                //                                                        .getText()));
                                //                                }
                        }
                });

                JPanel buttonPane = new JPanel();
                //                buttonPane.setColor.red);< /font>
                GridBagConstraints gbc_buttonPane = new GridBagConstraints();
                gbc_buttonPane.fill = GridBagConstraints.HORIZONTAL;
                gbc_buttonPane.insets = new Insets(0, 0, 5, 5);
                gbc_buttonPane.gridx = 2;
                gbc_buttonPane.gridy = 2;
                mainPane.add(buttonPane, gbc_buttonPane);

                createmd5Button = new JButton("create md5");
                checkmd5Btn = new JButton("check");
                checkmd5Btn.setEnabled(false);
                buttonPane.add(createmd5Button);
                buttonPane.add(checkmd5Btn);
                createmd5Button.addActionListener(new ActionListener()
                {
                        @Override
                        public void actionPerformed(ActionEvent e)
                        {
                                if (!validate3(true))
                                {
                                        return;
                                }
                                sourceFileTF.setEditable(false);
                                new Thread(new Runnable()
                                {
                                        @Override
                                        public void run()
                                        {
                                                createmd5Button.setEnabled(false);
                                                size_of_file = srcfile.length();
                                                result = SystemUtil.getFileMD5(srcfile);
                                                checkmd5Btn.setEnabled(true);
                                                createmd5Button.setEnabled(true);
                                        }
                                }).start();

                                
                        }
                });

                checkmd5Btn.addActionListener(new ActionListener()
                {
                        @Override
                        public void actionPerformed(ActionEvent e)
                        {
                                //                                if (!validate3(true))
                                //                                {
                                //                                        return;
                                //                                }
                                long size_of_file2 = srcfile.length();
                                if (size_of_file2 != size_of_file)
                                {
                                        System.out.println("by size");
                                        GUIUtil23.errorDialog(MESG_DIFF);
                                        return;
                                }

                                new Thread(new Runnable()
                                {
                                        @Override
                                        public void run()
                                        {
                                                checkmd5Btn.setEnabled(false);
                                                String result2;
                                                sourceFileTF.setEditable(true);
                                                result2 = SystemUtil.getFileMD5(srcfile);
                                                boolean isSame2=isSame(result2, result);
                                                checkmd5Btn.setEnabled(true);
                                                if (isSame2)
                                                {
                                                        GUIUtil23.infoDialog(MESG_SAME);
                                                }
                                                else
                                                {
                                                        GUIUtil23.errorDialog(MESG_DIFF);
                                                }
                                        }
                                }).start();
                                
                        }
                });

                JLabel targetLabel = new JLabel("target file");
                GridBagConstraints gbc_driveClassLabel = new GridBagConstraints();
                gbc_driveClassLabel.anchor = GridBagConstraints.WEST;
                gbc_driveClassLabel.insets = new Insets(0, 0, 5, 5);
                gbc_driveClassLabel.gridx = 1;
                gbc_driveClassLabel.gridy = 3;
                mainPane.add(targetLabel, gbc_driveClassLabel);

                targetFileTF = new JTextField();
                if (!SystemUtil.isWindows)
                {
                        targetFileTF.setText("/home/whuang2/bin/wh_dos2unix");
                }
                GridBagConstraints gbc_driveClassTF = new GridBagConstraints();
                gbc_driveClassTF.insets = new Insets(0, 0, 5, 5);
                gbc_driveClassTF.fill = GridBagConstraints.HORIZONTAL;
                gbc_driveClassTF.gridx = 2;
                gbc_driveClassTF.gridy = 3;
                mainPane.add(targetFileTF, gbc_driveClassTF);
                targetFileTF.setColumns(10);

                browserTargetBtn = new JButton("browser target");
                GridBagConstraints gbc_browserTargetBtn = new GridBagConstraints();
                gbc_browserTargetBtn.fill = GridBagConstraints.EAST;
                gbc_browserTargetBtn.insets = new Insets(0, 0, 5, 5);
                gbc_browserTargetBtn.gridx = 3;
                gbc_browserTargetBtn.gridy = 3;
                mainPane.add(browserTargetBtn, gbc_browserTargetBtn);
                browserTargetBtn.addActionListener(new ActionListener()
                {
                        @Override
                        public void actionPerformed(ActionEvent e)
                        {
                                //                                System.out.println("target");
                                DialogUtil.browser3(targetFileTF,
                                        JFileChooser.FILES_AND_DIRECTORIES, CheckSameApp.this);
                        }
                });
                compareBtn = new JButton("compare");
                GridBagConstraints gbc_runBtn = new GridBagConstraints();
                gbc_runBtn.fill = GridBagConstraints.EAST;
                gbc_runBtn.insets = new Insets(0, 0, 5, 5);
                gbc_runBtn.gridx = 4;
                gbc_runBtn.gridy = 3;
                mainPane.add(compareBtn, gbc_runBtn);

                compareBtn.addActionListener(new ActionListener()
                {

                        @Override
                        public void actionPerformed(ActionEvent e)
                        {
                                if (!validate3(false))
                                {
                                        return;
                                }

                                long size_of_targfile = targfile.length();
                                long size_of_srcfile = srcfile.length();
                                if (size_of_targfile != size_of_srcfile)
                                {
                                        System.out.println("by size");
                                        GUIUtil23.errorDialog(MESG_DIFF);
                                        return;
                                }
                                new Thread(new Runnable()
                                {
                                        @Override
                                        public void run()
                                        {
                                                compareBtn.setEnabled(false);
                                                String result_source = SystemUtil.getFileMD5(srcfile);
                                                String result_target;
                                                result_target = SystemUtil.getFileMD5(targfile);
                                                boolean isSame2=isSame(result_source, result_target);
                                                compareBtn.setEnabled(true);
                                                if (isSame2)
                                                {
                                                        GUIUtil23.infoDialog(MESG_SAME);
                                                }
                                                else
                                                {
                                                        GUIUtil23.errorDialog(MESG_DIFF);
                                                }

                                        }
                                }).start();
                        }
                });

                c.add(mainPane, BorderLayout.CENTER);
                //                System.out.println(c.getLayout());
                //new JScrollPane(text)
        }

        //        private String create_md5(String filePath)
        //        {
        //                try
        //                {
        //                        return create_md5(filePath, null);
        //                }
        //                catch (IOException e)
        //                {
        //                        e.printStackTrace();
        //                }
        //                return null;
        //        }

        /***
         *
         * @param result_source : such as b79898bb7907648871745cd5422c79ce     /home/whuang2/bin/ab.txt
         * @param result_target
         * @return
         */

        private boolean isSame(String result_source, String result_target)
        {
                if (result_source == null || result_target == null)
                {
                        return false;
                }
                return (result_source.split("[ \t]")[0].equals(result_target
                                .split("[ \t]")[0]));
        }

        //        private String create_md5(String filePath, JButton button)
        //                        throws IOException
        //        {
        //                //                String sourceFile=sourceFileTF.getText();
        //                //
        //                if (!new File(filePath).exists())
        //                {
        //                        System.out.println("does not exist");
        //                        return null;
        //                }
        //                String result2 = null;
        //                String[] commands = null;
        //                if (SystemUtil.isWindows)
        //                {
        //                        String md5deepPath = null;
        //                        if (SystemUtil.isOS32bit)
        //                        {
        //                                md5deepPath = "win32\\md5deep.exe";
        //                        }
        //                        else
        //                        {
        //                                md5deepPath = "win64\\md5deep64.exe";
        //                        }
        //
        //                        commands = new String[]
        //                        { System.getProperty("user.dir") + "\\md5deep\\" + md5deepPath,
        //                                "-b", filePath };
        //                }
        //                else
        //                {
        //                        commands = new String[]
        //                        { "md5sum", filePath };
        //                }
        //                ProcessBuilder pb = new ProcessBuilder(commands);
        //                //                if (directory != null)
        //                //                {
        //                //                        pb.directory(directory);
        //                //                }
        //                //                Map<String, String> env = pb.environment();
        //                //                env.put("$HOME", "/home/whuang2");
        //                MyProcess proc = null;
        //                try
        //                {
        //                        proc = new MyProcess(pb.start());
        //                        final CheckSameSwingWorker worker = new CheckSameSwingWorker(proc);
        //                        worker.execute();
        //
        //                        proc.waitFor();
        //                        if (button != null)
        //                        {
        //                                button.setEnabled(true);
        //                        }
        //                        result2 = worker.getStringbuf().toString();
        //                        //                        System.out.println("before exitValue");
        //                        //                        System.out.println("exit code:" + proc.exitValue());
        //                        //                        System.out.println("result:" + result);
        //                        //                        System.out.println("after exitValue");
        //                        //                        return result2;
        //                }
        //                catch (InterruptedException e1)
        //                {
        //                        e1.printStackTrace();
        //                }
        //                catch (IOException e2)
        //                {
        //                        e2.printStackTrace();
        //                }
        //                return result2;
        //        }

        private boolean validate3(boolean isSelf)
        {
                String sourceFile = sourceFileTF.getText();
                String targetFile_dir = targetFileTF.getText();
                if (sourceFile == null || sourceFile.equals(""))
                {
                        GUIUtil23
                                        .warningDialog("source file can not be empty,please select again    !");
                        sourceFileTF.requestFocus();//focus

                        return false;
                }
                if (!isSelf)
                {
                        if (targetFile_dir == null || targetFile_dir.equals(""))
                        {
                                GUIUtil23
                                                .warningDialog("target file can not be empty,please select again !");
                                targetFileTF.requestFocus();//focus
                                return false;
                        }
                }
                //                                System.out.println("source file:" + sourceFile);
                //                                System.out.println("target file:" + targetFile_dir);
                srcfile = new File(sourceFile);
                if (!srcfile.exists())
                {
                        GUIUtil23
                                        .warningDialog("source file does not exist,please select again!");
                        sourceFileTF.requestFocus();//focus
                        sourceFileTF.selectAll();
                        return false;
                }
                if (srcfile.exists() && srcfile.isDirectory())
                {
                        GUIUtil23
                                        .warningDialog("source file can not be directory,please select again!");
                        sourceFileTF.requestFocus();//focus
                        sourceFileTF.selectAll();
                        return false;
                }
                if (!isSelf)
                {
                        {
                                targfile = new File(targetFile_dir);
                                if (!targfile.exists())
                                {
                                        GUIUtil23
                                                        .warningDialog("target file does not exist,please select again!");
                                        targetFileTF.requestFocus();//focus
                                        targetFileTF.selectAll();
                                        return false;
                                }
                                if (targfile.exists() && targfile.isDirectory())
                                {
                                        GUIUtil23
                                                        .warningDialog("target file can not be directory,please select again!");
                                        targetFileTF.requestFocus();//focus
                                        targetFileTF.selectAll();
                                        return false;
                                }
                        }
                }
                return true;

        }

        //        public static void main2(String[] args)
        //        {
        //                String sourceFile = "/home/whuag2/workspace/io0007-find_progess/src/com/cmd/dos/hw/util/CMDUtil.java";
        //                md5(sourceFile);
        //        }

}

swingwork类:CheckSameSwingWorker

package com.hw.util;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.List;

import javax.swing.SwingWorker;

import com.common.util.MyProcess;

public class CheckSameSwingWorker extends SwingWorker<Boolean, Character>
{
        private BufferedReader br_right             = null;
        private BufferedReader br_error             = null;
        private MyProcess            myprocess            = null;
        private char                     word                     = ‘ ‘;
        private int                        tmp                        = 0;
        private boolean                isPrintVerbose = false;
        private StringBuffer     stringbuf            = new StringBuffer();

        public CheckSameSwingWorker(MyProcess myprocess, BufferedReader br)
        {
                this.br_right = br;
                this.myprocess = myprocess;

        }

        public CheckSameSwingWorker(MyProcess myprocess)
        {
                this.myprocess = myprocess;
                br_right = new BufferedReader(new InputStreamReader(
                        myprocess.getInputStream()), 4096);
                br_error = new BufferedReader(new InputStreamReader(
                        myprocess.getErrorStream()), 4096);
        }

        @Override
        protected Boolean doInBackground() throws Exception
        {
                while ((tmp = br_right.read()) != -1)
                {
                        word = (char) tmp;
                        publish(word);
                }
                while ((tmp = br_error.read()) != -1)
                {
                        word = (char) tmp;
                        publish(word);
                }
                if (isPrintVerbose)
                {
                        System.out.println("doInBackground() over");
                }
                return true;
        }

        @Override
        protected void process(List<Character> chunks)
        {
                for (char temp : chunks)
                {
                        {
//                                System.out.print(temp);
                                this.stringbuf.append(temp);
                        }
                }
        }

        public StringBuffer getStringbuf()
        {
                return stringbuf;
        }

        /***
         * main thread can‘t execute next command(below waitFor())
         * until done() is executed
         */

        @Override
        protected void done()
        {
                if (isPrintVerbose)
                {
                        System.out.println("done() is finish");
                }
                try
                {
                        br_right.close();
                }
                catch (IOException e)
                {
                        e.printStackTrace();
                }
                this.myprocess.stopLoop();
        }

}







本文出自 “whuang” 博客,请务必保留此出处http://huangkunlun520.blog.51cto.com/2562772/1653874

java 判断两个文件是否相同

标签:判断相同文件   过滤相同文件   

原文地址:http://huangkunlun520.blog.51cto.com/2562772/1653874

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!