JAVA版文件MD5生成器
做文件传输的时候,为了保证文件是合法的有效的,经常会对文件做MD5校验,以确保和原始的文件是一样的.并且做断点续传的时候这一点也是挺重要的,其实JAVA处理这方面也挺不错的,可是我搜了半天,也没有搜到一个用JAVA写的文件MD5生成程序,有的也只是命令行模式下的,没有一个GUI模式的,所以就写了一个GUI的,方便使用,只用了两个类,一个是工具类,除了生成MD5外还可以生成SHA码,大家可以通过改源文件达到这一点,并且文件支持拖放,可以把要生成的文件拖到文本区,就可以显示这个文件的信息了.
窗体的代码:
可以点击这里下载可执行的JAR文件和源代码
<!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->/*
*Tochangethistemplate,chooseTools|Templates
*andopenthetemplateintheeditor.
*/
packagetest1;
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.IOException;
importjava.security.MessageDigest;
importjava.security.NoSuchAlgorithmException;
importjava.util.logging.Level;
importjava.util.logging.Logger;
importjavax.swing.JProgressBar;
/**
*
*@authorhadeslee
*/
publicfinalclassUtil{
/**
*得到文件的MD5码,用于校验
*@paramfile
*@paramjpb
*@return
*/
publicstaticStringgetMD5(Filefile,JProgressBarjpb){
FileInputStreamfis=null;
jpb.setMaximum((int)file.length());
jpb.setValue(0);
jpb.setString("正在计算:"+file.getName()+"的MD5值");
try{
MessageDigestmd=MessageDigest.getInstance("MD5");
fis=newFileInputStream(file);
byte[]buffer=newbyte[8192];
intlength=-1;
System.out.println("开始算");
intvalue=0;
while((length=fis.read(buffer))!=-1){
md.update(buffer,0,length);
value+=length;
jpb.setValue(value);
}
System.out.println("算完了");
returnbytesToString(md.digest());
}catch(IOExceptionex){
Logger.getLogger(Util.class.getName()).log(Level.SEVERE,null,ex);
returnnull;
}catch(NoSuchAlgorithmExceptionex){
Logger.getLogger(Util.class.getName()).log(Level.SEVERE,null,ex);
returnnull;
}finally{
try{
fis.close();
}catch(IOExceptionex){
Logger.getLogger(Util.class.getName()).log(Level.SEVERE,null,ex);
}
}
}
/**
*
*@paramfile
*@return
*/
publicstaticStringgetMD5(Filefile){
FileInputStreamfis=null;
try{
MessageDigestmd=MessageDigest.getInstance("MD5");
fis=newFileInputStream(file);
byte[]buffer=newbyte[8192];
intlength=-1;
System.out.println("开始算");
while((length=fis.read(buffer))!=-1){
md.update(buffer,0,length);
}
System.out.println("算完了");
returnbytesToString(md.digest());
}catch(IOExceptionex){
Logger.getLogger(Util.class.getName()).log(Level.SEVERE,null,ex);
returnnull;
}catch(NoSuchAlgorithmExceptionex){
Logger.getLogger(Util.class.getName()).log(Level.SEVERE,null,ex);
returnnull;
}finally{
try{
fis.close();
}catch(IOExceptionex){
Logger.getLogger(Util.class.getName()).log(Level.SEVERE,null,ex);
}
}
}
/**
*得到文件的SHA码,用于校验
*@paramfile
*@return
*/
publicstaticStringgetSHA(Filefile){
FileInputStreamfis=null;
try{
MessageDigestmd=MessageDigest.getInstance("SHA");
fis=newFileInputStream(file);
byte[]buffer=newbyte[8192];
intlength=-1;
System.out.println("开始算");
while((length=fis.read(buffer))!=-1){
md.update(buffer,0,length);
}
System.out.println("算完了");
returnbytesToString(md.digest());
}catch(IOExceptionex){
Logger.getLogger(Util.class.getName()).log(Level.SEVERE,null,ex);
returnnull;
}catch(NoSuchAlgorithmExceptionex){
Logger.getLogger(Util.class.getName()).log(Level.SEVERE,null,ex);
returnnull;
}finally{
try{
fis.close();
}catch(IOExceptionex){
Logger.getLogger(Util.class.getName()).log(Level.SEVERE,null,ex);
}
}
}
/**
*
*@paramfile
*@paramjpb
*@return
*/
publicstaticStringgetSHA(Filefile,JProgressBarjpb){
FileInputStreamfis=null;
jpb.setMaximum((int)file.length());
jpb.setValue(0);
jpb.setString("正在计算:"+file.getName()+"的MD5值");
try{
MessageDigestmd=MessageDigest.getInstance("SHA");
fis=newFileInputStream(file);
byte[]buffer=newbyte[8192];
intlength=-1;
System.out.println("开始算");
intvalue=0;
while((length=fis.read(buffer))!=-1){
md.update(buffer,0,length);
value+=length;
jpb.setValue(value);
}
System.out.println("算完了");
returnbytesToString(md.digest());
}catch(IOExceptionex){
Logger.getLogger(Util.class.getName()).log(Level.SEVERE,null,ex);
returnnull;
}catch(NoSuchAlgorithmExceptionex){
Logger.getLogger(Util.class.getName()).log(Level.SEVERE,null,ex);
returnnull;
}finally{
try{
fis.close();
}catch(IOExceptionex){
Logger.getLogger(Util.class.getName()).log(Level.SEVERE,null,ex);
}
}
}
publicstaticStringbytesToString(byte[]data){
charhexDigits[]={'0','1','2','3','4','5','6','7','8','9','a','b','c','d',
'e','f'};
char[]temp=newchar[data.length*2];
for(inti=0;i<data.length;i++){
byteb=data[i];
temp[i*2]=hexDigits[b>>>4&0x0f];
temp[i*2+1]=hexDigits[b&0x0f];
}
returnnewString(temp);
}
publicstaticvoidmain(String[]args){
Strings=System.getProperties().getProperty("java.io.tmpdir");
System.out.println(s);
}
}
*Tochangethistemplate,chooseTools|Templates
*andopenthetemplateintheeditor.
*/
packagetest1;
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.IOException;
importjava.security.MessageDigest;
importjava.security.NoSuchAlgorithmException;
importjava.util.logging.Level;
importjava.util.logging.Logger;
importjavax.swing.JProgressBar;
/**
*
*@authorhadeslee
*/
publicfinalclassUtil{
/**
*得到文件的MD5码,用于校验
*@paramfile
*@paramjpb
*@return
*/
publicstaticStringgetMD5(Filefile,JProgressBarjpb){
FileInputStreamfis=null;
jpb.setMaximum((int)file.length());
jpb.setValue(0);
jpb.setString("正在计算:"+file.getName()+"的MD5值");
try{
MessageDigestmd=MessageDigest.getInstance("MD5");
fis=newFileInputStream(file);
byte[]buffer=newbyte[8192];
intlength=-1;
System.out.println("开始算");
intvalue=0;
while((length=fis.read(buffer))!=-1){
md.update(buffer,0,length);
value+=length;
jpb.setValue(value);
}
System.out.println("算完了");
returnbytesToString(md.digest());
}catch(IOExceptionex){
Logger.getLogger(Util.class.getName()).log(Level.SEVERE,null,ex);
returnnull;
}catch(NoSuchAlgorithmExceptionex){
Logger.getLogger(Util.class.getName()).log(Level.SEVERE,null,ex);
returnnull;
}finally{
try{
fis.close();
}catch(IOExceptionex){
Logger.getLogger(Util.class.getName()).log(Level.SEVERE,null,ex);
}
}
}
/**
*
*@paramfile
*@return
*/
publicstaticStringgetMD5(Filefile){
FileInputStreamfis=null;
try{
MessageDigestmd=MessageDigest.getInstance("MD5");
fis=newFileInputStream(file);
byte[]buffer=newbyte[8192];
intlength=-1;
System.out.println("开始算");
while((length=fis.read(buffer))!=-1){
md.update(buffer,0,length);
}
System.out.println("算完了");
returnbytesToString(md.digest());
}catch(IOExceptionex){
Logger.getLogger(Util.class.getName()).log(Level.SEVERE,null,ex);
returnnull;
}catch(NoSuchAlgorithmExceptionex){
Logger.getLogger(Util.class.getName()).log(Level.SEVERE,null,ex);
returnnull;
}finally{
try{
fis.close();
}catch(IOExceptionex){
Logger.getLogger(Util.class.getName()).log(Level.SEVERE,null,ex);
}
}
}
/**
*得到文件的SHA码,用于校验
*@paramfile
*@return
*/
publicstaticStringgetSHA(Filefile){
FileInputStreamfis=null;
try{
MessageDigestmd=MessageDigest.getInstance("SHA");
fis=newFileInputStream(file);
byte[]buffer=newbyte[8192];
intlength=-1;
System.out.println("开始算");
while((length=fis.read(buffer))!=-1){
md.update(buffer,0,length);
}
System.out.println("算完了");
returnbytesToString(md.digest());
}catch(IOExceptionex){
Logger.getLogger(Util.class.getName()).log(Level.SEVERE,null,ex);
returnnull;
}catch(NoSuchAlgorithmExceptionex){
Logger.getLogger(Util.class.getName()).log(Level.SEVERE,null,ex);
returnnull;
}finally{
try{
fis.close();
}catch(IOExceptionex){
Logger.getLogger(Util.class.getName()).log(Level.SEVERE,null,ex);
}
}
}
/**
*
*@paramfile
*@paramjpb
*@return
*/
publicstaticStringgetSHA(Filefile,JProgressBarjpb){
FileInputStreamfis=null;
jpb.setMaximum((int)file.length());
jpb.setValue(0);
jpb.setString("正在计算:"+file.getName()+"的MD5值");
try{
MessageDigestmd=MessageDigest.getInstance("SHA");
fis=newFileInputStream(file);
byte[]buffer=newbyte[8192];
intlength=-1;
System.out.println("开始算");
intvalue=0;
while((length=fis.read(buffer))!=-1){
md.update(buffer,0,length);
value+=length;
jpb.setValue(value);
}
System.out.println("算完了");
returnbytesToString(md.digest());
}catch(IOExceptionex){
Logger.getLogger(Util.class.getName()).log(Level.SEVERE,null,ex);
returnnull;
}catch(NoSuchAlgorithmExceptionex){
Logger.getLogger(Util.class.getName()).log(Level.SEVERE,null,ex);
returnnull;
}finally{
try{
fis.close();
}catch(IOExceptionex){
Logger.getLogger(Util.class.getName()).log(Level.SEVERE,null,ex);
}
}
}
publicstaticStringbytesToString(byte[]data){
charhexDigits[]={'0','1','2','3','4','5','6','7','8','9','a','b','c','d',
'e','f'};
char[]temp=newchar[data.length*2];
for(inti=0;i<data.length;i++){
byteb=data[i];
temp[i*2]=hexDigits[b>>>4&0x0f];
temp[i*2+1]=hexDigits[b&0x0f];
}
returnnewString(temp);
}
publicstaticvoidmain(String[]args){
Strings=System.getProperties().getProperty("java.io.tmpdir");
System.out.println(s);
}
}
窗体的代码:
<!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->/*
*Main.java
*
*Createdon2007年11月8日,上午9:15
*/
packagetest1;
importjava.awt.datatransfer.DataFlavor;
importjava.awt.datatransfer.Transferable;
importjava.awt.datatransfer.UnsupportedFlavorException;
importjava.awt.dnd.DnDConstants;
importjava.awt.dnd.DropTarget;
importjava.awt.dnd.DropTargetDragEvent;
importjava.awt.dnd.DropTargetDropEvent;
importjava.awt.dnd.DropTargetEvent;
importjava.awt.dnd.DropTargetListener;
importjava.io.File;
importjava.io.IOException;
importjava.text.SimpleDateFormat;
importjava.util.Date;
importjavax.swing.JFileChooser;
importjavax.swing.UIManager;
/**
*
*@authorhadeslee
*/
publicclassMainextendsjavax.swing.JFrameimplementsDropTargetListener{
privateJFileChooserjfc;
privateFiletoMd5;
privateDropTargetdt;
/**CreatesnewformMain*/
publicMain(){
try{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}catch(Exceptionexe){
exe.printStackTrace();
}
initComponents();
initOther();
this.setLocationRelativeTo(null);
}
privatevoidinitOther(){
dt=newDropTarget(jTextArea1,DnDConstants.ACTION_COPY_OR_MOVE,this);
}
/**Thismethodiscalledfromwithintheconstructorto
*initializetheform.
*WARNING:DoNOTmodifythiscode.Thecontentofthismethodis
*alwaysregeneratedbytheFormEditor.
*/
//<editor-folddefaultstate="collapsed"desc="GeneratedCode">
privatevoidinitComponents(){
jLabel1=newjavax.swing.JLabel();
jTextField1=newjavax.swing.JTextField();
jButton1=newjavax.swing.JButton();
jScrollPane1=newjavax.swing.JScrollPane();
jTextArea1=newjavax.swing.JTextArea();
jButton2=newjavax.swing.JButton();
jButton3=newjavax.swing.JButton();
jpb=newjavax.swing.JProgressBar();
jLabel2=newjavax.swing.JLabel();
jTextField2=newjavax.swing.JTextField();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setTitle("MD5生成");
setResizable(false);
jLabel1.setText("文件路径:");
jTextField1.setEditable(false);
jButton1.setText("浏览");
jButton1.addActionListener(newjava.awt.event.ActionListener(){
publicvoidactionPerformed(java.awt.event.ActionEventevt){
jButton1ActionPerformed(evt);
}
});
jScrollPane1.setBorder(javax.swing.BorderFactory.createTitledBorder("文件信息"));
jTextArea1.setColumns(20);
jTextArea1.setRows(5);
jScrollPane1.setViewportView(jTextArea1);
jButton2.setText("生成");
jButton2.addActionListener(newjava.awt.event.ActionListener(){
publicvoidactionPerformed(java.awt.event.ActionEventevt){
jButton2ActionPerformed(evt);
}
});
jButton3.setText("退出");
jButton3.addActionListener(newjava.awt.event.ActionListener(){
publicvoidactionPerformed(java.awt.event.ActionEventevt){
jButton3ActionPerformed(evt);
}
});
jLabel2.setText("MD5值:");
jTextField2.setEditable(false);
javax.swing.GroupLayoutlayout=newjavax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING,false)
.addGroup(layout.createSequentialGroup()
.addComponent(jButton2)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jButton3)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jpb,javax.swing.GroupLayout.DEFAULT_SIZE,javax.swing.GroupLayout.DEFAULT_SIZE,Short.MAX_VALUE))
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel2)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jTextField2))
.addComponent(jScrollPane1)
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jTextField1,javax.swing.GroupLayout.PREFERRED_SIZE,246,javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jButton1)))
.addContainerGap(16,Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel1)
.addComponent(jTextField1,javax.swing.GroupLayout.PREFERRED_SIZE,javax.swing.GroupLayout.DEFAULT_SIZE,javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jButton1))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jScrollPane1,javax.swing.GroupLayout.PREFERRED_SIZE,182,javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel2)
.addComponent(jTextField2,javax.swing.GroupLayout.PREFERRED_SIZE,javax.swing.GroupLayout.DEFAULT_SIZE,javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED,11,Short.MAX_VALUE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
.addComponent(jButton3)
.addComponent(jpb,javax.swing.GroupLayout.PREFERRED_SIZE,javax.swing.GroupLayout.DEFAULT_SIZE,javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap())
.addGroup(layout.createSequentialGroup()
.addGap(267,267,267)
.addComponent(jButton2)
.addGap(10,10,10))
);
pack();
}//</editor-fold>
privatevoidjButton1ActionPerformed(java.awt.event.ActionEventevt){
//TODOaddyourhandlingcodehere:
if(jfc==null){
jfc=newJFileChooser();
jfc.setFileSelectionMode(JFileChooser.FILES_ONLY);
}
if(jfc.showOpenDialog(this)==JFileChooser.APPROVE_OPTION){
toMd5=jfc.getSelectedFile();
jTextField1.setText(toMd5.toString());
showFileInfo();
}
}
privatevoidjButton2ActionPerformed(java.awt.event.ActionEventevt){
//TODOaddyourhandlingcodehere:
jButton2.setEnabled(false);
newThread(){
publicvoidrun(){
Strings=Util.getMD5(toMd5,jpb);
jTextField2.setText(s);
jButton2.setEnabled(true);
}
}.start();
}
privatevoidjButton3ActionPerformed(java.awt.event.ActionEventevt){
//TODOaddyourhandlingcodehere:
System.exit(0);
}
privatevoidshowFileInfo(){
if(toMd5!=null){
SimpleDateFormatsdf=newSimpleDateFormat("yyyy年MM月dd日HH:mm:ss");
Filef=toMd5;
StringBuildersb=newStringBuilder();
sb.append("文件名称:").append(f.getName()).append('/n');
sb.append("文件大小:").append(f.length()).append('/n');
sb.append("文件最后修改日期:").append(sdf.format(newDate(f.lastModified()))).append("/n");
sb.append("文件属性:").append(f.canWrite()?"读写":"只读").append('/n');
jTextArea1.setText(sb.toString());
}
}
/**
*@paramargsthecommandlinearguments
*/
publicstaticvoidmain(Stringargs[]){
java.awt.EventQueue.invokeLater(newRunnable(){
publicvoidrun(){
newMain().setVisible(true);
}
});
}
//Variablesdeclaration-donotmodify
privatejavax.swing.JButtonjButton1;
privatejavax.swing.JButtonjButton2;
privatejavax.swing.JButtonjButton3;
privatejavax.swing.JLabeljLabel1;
privatejavax.swing.JLabeljLabel2;
privatejavax.swing.JScrollPanejScrollPane1;
privatejavax.swing.JTextAreajTextArea1;
privatejavax.swing.JTextFieldjTextField1;
privatejavax.swing.JTextFieldjTextField2;
privatejavax.swing.JProgressBarjpb;
//Endofvariablesdeclaration
publicvoiddragEnter(DropTargetDragEventdtde){
dtde.acceptDrag(DnDConstants.ACTION_COPY_OR_MOVE);
}
publicvoiddragOver(DropTargetDragEventdtde){
}
publicvoiddropActionChanged(DropTargetDragEventdtde){
}
publicvoiddragExit(DropTargetEventdte){
}
publicvoiddrop(DropTargetDropEvente){
try{
if(e.isDataFlavorSupported(DataFlavor.javaFileListFlavor)){
Transferabletr=e.getTransferable();
e.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
@SuppressWarnings("unchecked")
java.util.List<File>list=(java.util.List<File>)tr.getTransferData(DataFlavor.javaFileListFlavor);
if(list.size()==1){
Filef=list.get(0);
if(f.isFile()){
toMd5=list.get(0);
this.showFileInfo();
jTextField1.setText(toMd5.toString());
}
}
e.dropComplete(true);
}else{
e.rejectDrop();
}
}catch(IOExceptionio){
io.printStackTrace();
e.rejectDrop();
}catch(UnsupportedFlavorExceptionufe){
ufe.printStackTrace();
e.rejectDrop();
}
}
}
*Main.java
*
*Createdon2007年11月8日,上午9:15
*/
packagetest1;
importjava.awt.datatransfer.DataFlavor;
importjava.awt.datatransfer.Transferable;
importjava.awt.datatransfer.UnsupportedFlavorException;
importjava.awt.dnd.DnDConstants;
importjava.awt.dnd.DropTarget;
importjava.awt.dnd.DropTargetDragEvent;
importjava.awt.dnd.DropTargetDropEvent;
importjava.awt.dnd.DropTargetEvent;
importjava.awt.dnd.DropTargetListener;
importjava.io.File;
importjava.io.IOException;
importjava.text.SimpleDateFormat;
importjava.util.Date;
importjavax.swing.JFileChooser;
importjavax.swing.UIManager;
/**
*
*@authorhadeslee
*/
publicclassMainextendsjavax.swing.JFrameimplementsDropTargetListener{
privateJFileChooserjfc;
privateFiletoMd5;
privateDropTargetdt;
/**CreatesnewformMain*/
publicMain(){
try{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}catch(Exceptionexe){
exe.printStackTrace();
}
initComponents();
initOther();
this.setLocationRelativeTo(null);
}
privatevoidinitOther(){
dt=newDropTarget(jTextArea1,DnDConstants.ACTION_COPY_OR_MOVE,this);
}
/**Thismethodiscalledfromwithintheconstructorto
*initializetheform.
*WARNING:DoNOTmodifythiscode.Thecontentofthismethodis
*alwaysregeneratedbytheFormEditor.
*/
//<editor-folddefaultstate="collapsed"desc="GeneratedCode">
privatevoidinitComponents(){
jLabel1=newjavax.swing.JLabel();
jTextField1=newjavax.swing.JTextField();
jButton1=newjavax.swing.JButton();
jScrollPane1=newjavax.swing.JScrollPane();
jTextArea1=newjavax.swing.JTextArea();
jButton2=newjavax.swing.JButton();
jButton3=newjavax.swing.JButton();
jpb=newjavax.swing.JProgressBar();
jLabel2=newjavax.swing.JLabel();
jTextField2=newjavax.swing.JTextField();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setTitle("MD5生成");
setResizable(false);
jLabel1.setText("文件路径:");
jTextField1.setEditable(false);
jButton1.setText("浏览");
jButton1.addActionListener(newjava.awt.event.ActionListener(){
publicvoidactionPerformed(java.awt.event.ActionEventevt){
jButton1ActionPerformed(evt);
}
});
jScrollPane1.setBorder(javax.swing.BorderFactory.createTitledBorder("文件信息"));
jTextArea1.setColumns(20);
jTextArea1.setRows(5);
jScrollPane1.setViewportView(jTextArea1);
jButton2.setText("生成");
jButton2.addActionListener(newjava.awt.event.ActionListener(){
publicvoidactionPerformed(java.awt.event.ActionEventevt){
jButton2ActionPerformed(evt);
}
});
jButton3.setText("退出");
jButton3.addActionListener(newjava.awt.event.ActionListener(){
publicvoidactionPerformed(java.awt.event.ActionEventevt){
jButton3ActionPerformed(evt);
}
});
jLabel2.setText("MD5值:");
jTextField2.setEditable(false);
javax.swing.GroupLayoutlayout=newjavax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING,false)
.addGroup(layout.createSequentialGroup()
.addComponent(jButton2)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jButton3)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jpb,javax.swing.GroupLayout.DEFAULT_SIZE,javax.swing.GroupLayout.DEFAULT_SIZE,Short.MAX_VALUE))
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel2)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jTextField2))
.addComponent(jScrollPane1)
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jTextField1,javax.swing.GroupLayout.PREFERRED_SIZE,246,javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jButton1)))
.addContainerGap(16,Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel1)
.addComponent(jTextField1,javax.swing.GroupLayout.PREFERRED_SIZE,javax.swing.GroupLayout.DEFAULT_SIZE,javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jButton1))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jScrollPane1,javax.swing.GroupLayout.PREFERRED_SIZE,182,javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel2)
.addComponent(jTextField2,javax.swing.GroupLayout.PREFERRED_SIZE,javax.swing.GroupLayout.DEFAULT_SIZE,javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED,11,Short.MAX_VALUE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
.addComponent(jButton3)
.addComponent(jpb,javax.swing.GroupLayout.PREFERRED_SIZE,javax.swing.GroupLayout.DEFAULT_SIZE,javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap())
.addGroup(layout.createSequentialGroup()
.addGap(267,267,267)
.addComponent(jButton2)
.addGap(10,10,10))
);
pack();
}//</editor-fold>
privatevoidjButton1ActionPerformed(java.awt.event.ActionEventevt){
//TODOaddyourhandlingcodehere:
if(jfc==null){
jfc=newJFileChooser();
jfc.setFileSelectionMode(JFileChooser.FILES_ONLY);
}
if(jfc.showOpenDialog(this)==JFileChooser.APPROVE_OPTION){
toMd5=jfc.getSelectedFile();
jTextField1.setText(toMd5.toString());
showFileInfo();
}
}
privatevoidjButton2ActionPerformed(java.awt.event.ActionEventevt){
//TODOaddyourhandlingcodehere:
jButton2.setEnabled(false);
newThread(){
publicvoidrun(){
Strings=Util.getMD5(toMd5,jpb);
jTextField2.setText(s);
jButton2.setEnabled(true);
}
}.start();
}
privatevoidjButton3ActionPerformed(java.awt.event.ActionEventevt){
//TODOaddyourhandlingcodehere:
System.exit(0);
}
privatevoidshowFileInfo(){
if(toMd5!=null){
SimpleDateFormatsdf=newSimpleDateFormat("yyyy年MM月dd日HH:mm:ss");
Filef=toMd5;
StringBuildersb=newStringBuilder();
sb.append("文件名称:").append(f.getName()).append('/n');
sb.append("文件大小:").append(f.length()).append('/n');
sb.append("文件最后修改日期:").append(sdf.format(newDate(f.lastModified()))).append("/n");
sb.append("文件属性:").append(f.canWrite()?"读写":"只读").append('/n');
jTextArea1.setText(sb.toString());
}
}
/**
*@paramargsthecommandlinearguments
*/
publicstaticvoidmain(Stringargs[]){
java.awt.EventQueue.invokeLater(newRunnable(){
publicvoidrun(){
newMain().setVisible(true);
}
});
}
//Variablesdeclaration-donotmodify
privatejavax.swing.JButtonjButton1;
privatejavax.swing.JButtonjButton2;
privatejavax.swing.JButtonjButton3;
privatejavax.swing.JLabeljLabel1;
privatejavax.swing.JLabeljLabel2;
privatejavax.swing.JScrollPanejScrollPane1;
privatejavax.swing.JTextAreajTextArea1;
privatejavax.swing.JTextFieldjTextField1;
privatejavax.swing.JTextFieldjTextField2;
privatejavax.swing.JProgressBarjpb;
//Endofvariablesdeclaration
publicvoiddragEnter(DropTargetDragEventdtde){
dtde.acceptDrag(DnDConstants.ACTION_COPY_OR_MOVE);
}
publicvoiddragOver(DropTargetDragEventdtde){
}
publicvoiddropActionChanged(DropTargetDragEventdtde){
}
publicvoiddragExit(DropTargetEventdte){
}
publicvoiddrop(DropTargetDropEvente){
try{
if(e.isDataFlavorSupported(DataFlavor.javaFileListFlavor)){
Transferabletr=e.getTransferable();
e.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
@SuppressWarnings("unchecked")
java.util.List<File>list=(java.util.List<File>)tr.getTransferData(DataFlavor.javaFileListFlavor);
if(list.size()==1){
Filef=list.get(0);
if(f.isFile()){
toMd5=list.get(0);
this.showFileInfo();
jTextField1.setText(toMd5.toString());
}
}
e.dropComplete(true);
}else{
e.rejectDrop();
}
}catch(IOExceptionio){
io.printStackTrace();
e.rejectDrop();
}catch(UnsupportedFlavorExceptionufe){
ufe.printStackTrace();
e.rejectDrop();
}
}
}
可以点击这里下载可执行的JAR文件和源代码
相关推荐
任何一个文件,无论是可执行程序、图像文件、临时文件或者其他任何类型的文件,也不管它体积多大,都有且只有一个独一无二的MD5信息值,并且如果这个文件被修改过,它的MD5值也将随之改变。因此,我们可以通过对比...
一个生成md5码的工具,超级好用,这个是我平时用来生成文件的md5的工具,实在是缺分才贡献出来的,给个好评吧
代码生成二维码
MD5校验和生成器和校验器 用法:生成md5校验和:./file -generate / directory / of / files /再次检查原始md5校验和:./file -check / directory / of / files / location_to_original_md5 md5哈希值的生成顺序很...
适合人群 1、具备一定Java编程基础。 2、对springboot,spring,mybatis,mybatis plus,mysql,freemarker等java技术有基本应用。 3、可大大提高开发效率,数据表创建完以后,...5、操作手册参见项目中的README.md文件
为给定目录或文件生成一组校验和(MD5),可以选择将其作为zip存档或块。 如何使用: 部署sbt 运行sbt assembly 将ChecksumGen-assembly-0.1-SNAPSHOT.jar复制到任何位置并运行 例如: java -jar ChecksumGen-...
##简易古诗生成器 ###初期版本 对古诗句素材库进行关键词提取,储存为语料库,生成器根据生成诗句的格式从语料库随机抽取相应词项; 生成古诗的质量完全取决于素材库的素材质量; ###后期更新版本(TODO) 词项...
Signature signet = java.security.Signature.getInstance("MD5withRSA"); signet.initSign(prikey); signet.update(plainText.getBytes()); byte[] signed = Base64.encodeToByte(signet.sign()); return ...
MD5 彩虹表生成器一个非常简单的彩虹表生成器。什么是彩虹桌? 彩虹表是一个预先计算好的表,用于反转密码散列函数,通常用于破解密码散列。 表通常用于恢复由有限字符集组成的特定长度的明文密码。 。构建说明为了...
Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...
md5sumchecker MD5SUM 检查器小工具,用于生成使用直接链接下载的任何文件的 MD5 总和,并将结果与给定的 MD5 哈希值进行比较并确定文件的完整性
Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式化插件 Eclipse Tidy Eclipse HTML Tidy 是一款 Eclipse 的...
Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式化插件 Eclipse Tidy Eclipse HTML Tidy 是一款 Eclipse 的...
java打开原始文件OSS通知文件生成器 OSS Notice File Generator是一个简单的Java库,用于为开源软件生成NOTICE.md文件。 相依性 <groupId>org.silentsoft.oss <artifactId>notice-file-generator <version>...
Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...
案例3 拼图游戏 案例4 贪吃蛇游戏 案例5 打球游戏 案例6 棒打猪头 第五章 Java与文件操作 案例1 目录列表的显示 案例2 检查与创建目录 案例3 文件复制 案例4 文件查看器 ...
Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式化插件 Eclipse Tidy Eclipse HTML Tidy 是一款 Eclipse 的...
基于Springboot+VUE 的前后端分离式谷歌验证码生成器后台代码 ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信...
Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式化插件 Eclipse Tidy Eclipse HTML Tidy 是一款 Eclipse 的...
Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式化插件 Eclipse Tidy Eclipse HTML Tidy 是一款 Eclipse 的...