<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    千里冰封
    JAVA 濃香四溢
    posts - 151,comments - 2801,trackbacks - 0
    做文件傳輸的時候,為了保證文件是合法的有效的,經常會對文件做MD5校驗,以確保和原始的文件是一樣的.并且做斷點續傳的時候這一點也是挺重要的,其實JAVA處理這方面也挺不錯的,可是我搜了半天,也沒有搜到一個用JAVA寫的文件MD5生成程序,有的也只是命令行模式下的,沒有一個GUI模式的,所以就寫了一個GUI的,方便使用,只用了兩個類,一個是工具類,除了生成MD5外還可以生成SHA碼,大家可以通過改源文件達到這一點,并且文件支持拖放,可以把要生成的文件拖到文本區,就可以顯示這個文件的信息了.

    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     
    */
    package test1; 

    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.security.MessageDigest;
    import java.security.NoSuchAlgorithmException;
    import java.util.logging.Level;
    import java.util.logging.Logger;
    import javax.swing.JProgressBar;

    /**
     *
     * 
    @author hadeslee
     
    */
    public final class Util {

        
    /**
         * 得到文件的MD5碼,用于校驗
         * 
    @param file
         * 
    @param jpb 
         * 
    @return
         
    */
        
    public static String getMD5(File file, JProgressBar jpb) {
            FileInputStream fis 
    = null;
            jpb.setMaximum((
    int) file.length());
            jpb.setValue(
    0);
            jpb.setString(
    "正在計算:" + file.getName() + "的MD5值");
            
    try {
                MessageDigest md 
    = MessageDigest.getInstance("MD5");
                fis 
    = new FileInputStream(file);
                
    byte[] buffer = new byte[8192];
                
    int length = -1;
                System.out.println(
    "開始算");
                
    int value = 0;
                
    while ((length = fis.read(buffer)) != -1) {
                    md.update(buffer, 
    0, length);
                    value 
    += length;
                    jpb.setValue(value);
                }
                System.out.println(
    "算完了");
                
    return bytesToString(md.digest());
            } 
    catch (IOException ex) {
                Logger.getLogger(Util.
    class.getName()).log(Level.SEVERE, null, ex);
                
    return null;
            } 
    catch (NoSuchAlgorithmException ex) {
                Logger.getLogger(Util.
    class.getName()).log(Level.SEVERE, null, ex);
                
    return null;
            } 
    finally {
                
    try {
                    fis.close();
                } 
    catch (IOException ex) {
                    Logger.getLogger(Util.
    class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }

        
    /**
         * 
         * 
    @param file
         * 
    @return
         
    */
        
    public static String getMD5(File file) {
            FileInputStream fis 
    = null;
            
    try {
                MessageDigest md 
    = MessageDigest.getInstance("MD5");
                fis 
    = new FileInputStream(file);
                
    byte[] buffer = new byte[8192];
                
    int length = -1;
                System.out.println(
    "開始算");
                
    while ((length = fis.read(buffer)) != -1) {
                    md.update(buffer, 
    0, length);
                }
                System.out.println(
    "算完了");
                
    return bytesToString(md.digest());
            } 
    catch (IOException ex) {
                Logger.getLogger(Util.
    class.getName()).log(Level.SEVERE, null, ex);
                
    return null;
            } 
    catch (NoSuchAlgorithmException ex) {
                Logger.getLogger(Util.
    class.getName()).log(Level.SEVERE, null, ex);
                
    return null;
            } 
    finally {
                
    try {
                    fis.close();
                } 
    catch (IOException ex) {
                    Logger.getLogger(Util.
    class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }

        
    /**
         * 得到文件的SHA碼,用于校驗
         * 
    @param file
         * 
    @return
         
    */
        
    public static String getSHA(File file) {
            FileInputStream fis 
    = null;
            
    try {
                MessageDigest md 
    = MessageDigest.getInstance("SHA");
                fis 
    = new FileInputStream(file);
                
    byte[] buffer = new byte[8192];
                
    int length = -1;
                System.out.println(
    "開始算");
                
    while ((length = fis.read(buffer)) != -1) {
                    md.update(buffer, 
    0, length);
                }
                System.out.println(
    "算完了");
                
    return bytesToString(md.digest());
            } 
    catch (IOException ex) {
                Logger.getLogger(Util.
    class.getName()).log(Level.SEVERE, null, ex);
                
    return null;
            } 
    catch (NoSuchAlgorithmException ex) {
                Logger.getLogger(Util.
    class.getName()).log(Level.SEVERE, null, ex);
                
    return null;
            } 
    finally {
                
    try {
                    fis.close();
                } 
    catch (IOException ex) {
                    Logger.getLogger(Util.
    class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }
        
        
    /**
         * 
         * 
    @param file
         * 
    @param jpb
         * 
    @return
         
    */
        
    public static String getSHA(File file,JProgressBar jpb) {
            FileInputStream fis 
    = null;
            jpb.setMaximum((
    int) file.length());
            jpb.setValue(
    0);
            jpb.setString(
    "正在計算:" + file.getName() + "的MD5值");
            
    try {
                MessageDigest md 
    = MessageDigest.getInstance("SHA");
                fis 
    = new FileInputStream(file);
                
    byte[] buffer = new byte[8192];
                
    int length = -1;
                System.out.println(
    "開始算");
                
    int value=0;
                
    while ((length = fis.read(buffer)) != -1) {
                    md.update(buffer, 
    0, length);
                    value
    +=length;
                    jpb.setValue(value);
                }
                System.out.println(
    "算完了");
                
    return bytesToString(md.digest());
            } 
    catch (IOException ex) {
                Logger.getLogger(Util.
    class.getName()).log(Level.SEVERE, null, ex);
                
    return null;
            } 
    catch (NoSuchAlgorithmException ex) {
                Logger.getLogger(Util.
    class.getName()).log(Level.SEVERE, null, ex);
                
    return null;
            } 
    finally {
                
    try {
                    fis.close();
                } 
    catch (IOException ex) {
                    Logger.getLogger(Util.
    class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }

        
    public static String bytesToString(byte[] data) {
            
    char hexDigits[] = {'0''1''2''3''4''5''6''7''8''9''a''b''c''d',
                    
    'e''f'};
            
    char[] temp = new char[data.length * 2];
            
    for (int i = 0; i < data.length; i++) {
                
    byte b = data[i];
                temp[i 
    * 2= hexDigits[b >>> 4 & 0x0f];
                temp[i 
    * 2 + 1= hexDigits[b & 0x0f];
            }
            
    return new String(temp);

        }

        
    public static void main(String[] args) {
            String s 
    = System.getProperties().getProperty("java.io.tmpdir");
            System.out.println(s);
        }
    }

    窗體的代碼:

    /*
     * Main.java
     *
     * Created on 2007年11月8日, 上午9:15
     
    */
    package test1;

    import java.awt.datatransfer.DataFlavor;
    import java.awt.datatransfer.Transferable;
    import java.awt.datatransfer.UnsupportedFlavorException;
    import java.awt.dnd.DnDConstants;
    import java.awt.dnd.DropTarget;
    import java.awt.dnd.DropTargetDragEvent;
    import java.awt.dnd.DropTargetDropEvent;
    import java.awt.dnd.DropTargetEvent;
    import java.awt.dnd.DropTargetListener;
    import java.io.File;
    import java.io.IOException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import javax.swing.JFileChooser;
    import javax.swing.UIManager;

    /**
     *
     * 
    @author  hadeslee
     
    */
    public class Main extends javax.swing.JFrame implements DropTargetListener {

        
    private JFileChooser jfc;
        
    private File toMd5;
        
    private DropTarget dt;
        
    /** Creates new form Main */

        
    public Main() {
            
    try {
                UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
            } 
    catch (Exception exe) {
                exe.printStackTrace();
            }
            initComponents();
            initOther();
            
    this.setLocationRelativeTo(null);
        }

        
    private void initOther() {
            dt 
    = new DropTarget(jTextArea1, DnDConstants.ACTION_COPY_OR_MOVE, this);
        }
        
    /** This method is called from within the constructor to
         * initialize the form.
         * WARNING: Do NOT modify this code. The content of this method is
         * always regenerated by the Form Editor.
         
    */
        
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
        private void initComponents() {

            jLabel1 
    = new javax.swing.JLabel();
            jTextField1 
    = new javax.swing.JTextField();
            jButton1 
    = new javax.swing.JButton();
            jScrollPane1 
    = new javax.swing.JScrollPane();
            jTextArea1 
    = new javax.swing.JTextArea();
            jButton2 
    = new javax.swing.JButton();
            jButton3 
    = new javax.swing.JButton();
            jpb 
    = new javax.swing.JProgressBar();
            jLabel2 
    = new javax.swing.JLabel();
            jTextField2 
    = new javax.swing.JTextField();

            setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
            setTitle(
    "MD5生成");
            setResizable(
    false);

            jLabel1.setText(
    "文件路徑:");

            jTextField1.setEditable(
    false);

            jButton1.setText(
    "瀏覽");
            jButton1.addActionListener(
    new java.awt.event.ActionListener() {
                
    public void actionPerformed(java.awt.event.ActionEvent evt) {
                    jButton1ActionPerformed(evt);
                }
            });

            jScrollPane1.setBorder(javax.swing.BorderFactory.createTitledBorder(
    "文件信息"));

            jTextArea1.setColumns(
    20);
            jTextArea1.setRows(
    5);
            jScrollPane1.setViewportView(jTextArea1);

            jButton2.setText(
    "生成");
            jButton2.addActionListener(
    new java.awt.event.ActionListener() {
                
    public void actionPerformed(java.awt.event.ActionEvent evt) {
                    jButton2ActionPerformed(evt);
                }
            });

            jButton3.setText(
    "退出");
            jButton3.addActionListener(
    new java.awt.event.ActionListener() {
                
    public void actionPerformed(java.awt.event.ActionEvent evt) {
                    jButton3ActionPerformed(evt);
                }
            });

            jLabel2.setText(
    "MD5值:");

            jTextField2.setEditable(
    false);

            javax.swing.GroupLayout layout 
    = new javax.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(
    267267267)
                    .addComponent(jButton2)
                    .addGap(
    101010))
            );

            pack();
        }
    // </editor-fold>

        
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
            
    // TODO add your handling code here:
            if (jfc == null) {
                jfc 
    = new JFileChooser();
                jfc.setFileSelectionMode(JFileChooser.FILES_ONLY);
            }
            
    if (jfc.showOpenDialog(this== JFileChooser.APPROVE_OPTION) {
                toMd5 
    = jfc.getSelectedFile();
                jTextField1.setText(toMd5.toString());
                showFileInfo();
            }
        }

        
    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
            
    // TODO add your handling code here:
            jButton2.setEnabled(false);
            
    new Thread(){
                
    public void run(){
                    String s
    =Util.getMD5(toMd5, jpb);
                    jTextField2.setText(s);
                    jButton2.setEnabled(
    true);
                }
            }.start();
        }

        
    private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {
            
    // TODO add your handling code here:
            System.exit(0);
        }

        
    private void showFileInfo() {
            
    if (toMd5 != null) {
                SimpleDateFormat sdf 
    = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
                File f 
    = toMd5;
                StringBuilder sb 
    = new StringBuilder();
                sb.append(
    "文件名稱:").append(f.getName()).append('\n');
                sb.append(
    "文件大小:").append(f.length()).append('\n');
                sb.append(
    "文件最后修改日期:").append(sdf.format(new Date(f.lastModified()))).append("\n");
                sb.append(
    "文件屬性:").append(f.canWrite() ? "讀寫" : "只讀").append('\n');
                jTextArea1.setText(sb.toString());
            }
        }
        
    /**
         * 
    @param args the command line arguments
         
    */

        
    public static void main(String args[]) {
            java.awt.EventQueue.invokeLater(
    new Runnable() {

                        
    public void run() {
                            
    new Main().setVisible(true);
                        }
                    });
        }
        
    // Variables declaration - do not modify
        private javax.swing.JButton jButton1;
        
    private javax.swing.JButton jButton2;
        
    private javax.swing.JButton jButton3;
        
    private javax.swing.JLabel jLabel1;
        
    private javax.swing.JLabel jLabel2;
        
    private javax.swing.JScrollPane jScrollPane1;
        
    private javax.swing.JTextArea jTextArea1;
        
    private javax.swing.JTextField jTextField1;
        
    private javax.swing.JTextField jTextField2;
        
    private javax.swing.JProgressBar jpb;
        
    // End of variables declaration

        
    public void dragEnter(DropTargetDragEvent dtde) {
            dtde.acceptDrag(DnDConstants.ACTION_COPY_OR_MOVE);
        }

        
    public void dragOver(DropTargetDragEvent dtde) {
        }

        
    public void dropActionChanged(DropTargetDragEvent dtde) {
        }

        
    public void dragExit(DropTargetEvent dte) {
        }

        
    public void drop(DropTargetDropEvent e) {
            
    try {
                
    if (e.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
                    Transferable tr 
    = 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) {
                        File f 
    = list.get(0);
                        
    if (f.isFile()) {
                            toMd5 
    = list.get(0);
                            
    this.showFileInfo();
                            jTextField1.setText(toMd5.toString());
                        }
                    }
                    e.dropComplete(
    true);
                }
    else {
                    e.rejectDrop();
                }
            } 
    catch ( IOException io) {
                io.printStackTrace();
                e.rejectDrop();
            } 
    catch ( UnsupportedFlavorException ufe) {
                ufe.printStackTrace();
                e.rejectDrop();
            }
        }
    }

    可以點擊這里下載可執行的JAR文件和源代碼




    盡管千里冰封
    依然擁有晴空

    你我共同品味JAVA的濃香.
    posted on 2007-11-08 10:11 千里冰封 閱讀(7814) 評論(8)  編輯  收藏 所屬分類: JAVASE

    FeedBack:
    # re: JAVA版文件MD5生成器
    2007-11-08 12:43 | 最後の騎士
    暈,我怎么提示 javax.swing.GroupLayout無法解析為類型  回復  更多評論
      
    # re: JAVA版文件MD5生成器[未登錄]
    2007-11-08 12:58 | 屹礫
    嗯,不錯  回復  更多評論
      
    # re: JAVA版文件MD5生成器
    2007-11-08 16:27 | 千里冰封
    @最後の騎士
    要求JDK1.6才能運行,因為用了1.6新加的GroupLayout  回復  更多評論
      
    # re: JAVA版文件MD5生成器
    2007-11-09 05:33 | 編程中國某睡
    太有才啦  回復  更多評論
      
    # re: JAVA版文件MD5生成器
    2007-11-09 12:39 | lizongbo
    我自己曾經寫了個命令行的:

    http://618119.com/archives/2007/10/15/5.html

    建議你改一下不要硬編碼hash類型 :

    MessageDigest.getInstance("SHA");

    改成 MessageDigest.getInstance(hashType);

    這樣方便支持 MD4,MD5,SHA1,SHA-256,SHA-384,SHA-512

      回復  更多評論
      
    # re: JAVA版文件MD5生成器
    2008-01-22 11:04 | Crane Leeon
    可以用
    return (new java.math.BigInteger(md.digest())).toString(16);
    來代替筆者的 bytesToString 方法。
      回復  更多評論
      
    # re: JAVA版文件MD5生成器
    2009-05-12 15:30 | FENGLIBIN
    不錯,正是我找的,謝謝  回復  更多評論
      
    # re: JAVA版文件MD5生成器
    2015-03-26 14:32 | Ace
    不錯,正是我要學習的,謝謝  回復  更多評論
      
    主站蜘蛛池模板: 亚洲精品美女在线观看| 国产免费内射又粗又爽密桃视频 | 久久亚洲AV无码精品色午夜麻豆| 国产成人午夜精品免费视频| 国产成人免费ā片在线观看老同学| 亚洲欧洲日产国码久在线| 亚洲日产2021三区| 久久综合日韩亚洲精品色| 久久精品国产亚洲精品| 免费一级一片一毛片| 好爽…又高潮了免费毛片| 91高清免费国产自产| 99久久国产免费中文无字幕| a毛片全部免费播放| 中文字幕在线观看免费| 猫咪www免费人成网站| 亚洲Aⅴ在线无码播放毛片一线天| 91午夜精品亚洲一区二区三区| 亚洲天堂久久精品| 久久夜色精品国产亚洲AV动态图| 亚洲中文字幕在线观看| 国产亚洲人成网站在线观看| 亚洲乱码国产一区网址| 亚洲精品国产精品乱码不卞| 无码不卡亚洲成?人片| 国产小视频在线观看免费| 好爽好紧好大的免费视频国产| 黄瓜视频高清在线看免费下载| 97视频免费在线| 99久久免费国产精品特黄| 日韩毛片免费无码无毒视频观看| 9久9久女女免费精品视频在线观看| 亚洲精品WWW久久久久久| 蜜芽亚洲av无码一区二区三区| 亚洲狠狠色丁香婷婷综合| 亚洲国产精品无码久久九九大片| 亚洲妇女无套内射精| 青草久久精品亚洲综合专区| 国产av无码专区亚洲av毛片搜| 西西人体大胆免费视频| 国产特黄一级一片免费|