您的位置:首页 > 编程语言 > Java开发

java 判断两个文件是否相同

2013-03-12 10:31 489 查看
使用java 如何判断两个文件是否相同呢?我的做法是(1)先比较两个文件内容的长度;(2)在长度相同的情况下,再比较两个文件的MD5值。


【create md5】按钮用于记录source file的文件内容长度和MD5值。运行主类:CheckSameApppackage 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 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类:CheckSameSwingWorkerpackage 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();
}

}

依赖的jar是io0007-find_progess.jar在附件中。

附件:http://down.51cto.com/data/2362412
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java MD5