MD5sumForm

import java.awt.Button; import java.awt.Frame; import java.awt.List; import java.awt.Toolkit; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.StringSelection; import java.awt.datatransfer.Transferable; 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.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.security.MessageDigest;

public class MD5sumForm extends WindowAdapter implements ActionListener {  private static RecordList fileList = new MD5sumForm.RecordList();  private static final String msg = "Drag file(s) here to get MD5";

 public static void main(String[] args)  {   Frame window = new Frame();   window.setSize(400, 350);   window.setLayout(null);   window.setLocation(480, 320);   window.setResizable(false);   window.setTitle("MD5sum - By Wafly");

  window.add(fileList);

  final Button emptyBtn = new Button("Empty");   emptyBtn.setSize(100, 20);   emptyBtn.setLocation(280, 315);   window.add(emptyBtn);

  MD5sumForm evi = new MD5sumForm();   window.addWindowListener(evi);   emptyBtn.addActionListener(evi);        window.setVisible(true);  }    public void windowClosing(WindowEvent e)  {   System.exit(0);  }    public void actionPerformed(ActionEvent actionevent)  {   fileList.removeAll();   fileList.add(msg);  }

 private static void addFile(String filePath) {   if (filePath == null || filePath.trim().length() == 0)    return;   if (new File(filePath).exists())   {    try {     MessageDigest messagedigest = MessageDigest.getInstance("MD5");     InputStream fis = new FileInputStream(filePath);     byte[] buffer = new byte[1024];     int numRead = 0;     while ((numRead = fis.read(buffer)) > 0)      messagedigest.update(buffer, 0, numRead);     fis.close();     byte bytes[] = messagedigest.digest();     StringBuffer stringbuffer = new StringBuffer(2 * bytes.length);     char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };     int k = bytes.length;     for (int l = 0; l < k; l++)     {      stringbuffer.append(hexDigits[(bytes[l] & 0xf0) >> 4]);      stringbuffer.append(hexDigits[bytes[l] & 0xf]);     }     fileList.add(stringbuffer + " - " + filePath);    } catch (Exception e) {     fileList.add("-------------------------------- - " + filePath);    }   }  }

 private static class RecordList extends List implements DropTargetListener,KeyListener,ItemListener {   private static final long serialVersionUID = 1L;   private int lastSelectItemID = -1;      public RecordList()   {    setSize(360, 250);    setLocation(20, 50);    setMultipleMode(true);    new DropTarget(this, this);    addKeyListener(this);    addItemListener(this);    add(msg);   }

  private boolean isCTRLdown=false;   private boolean isShiftDown=false;   public void dragEnter(DropTargetDragEvent event) { }   public void dragExit(DropTargetEvent event) { }   public void dragOver(DropTargetDragEvent event) { }   public void dropActionChanged(DropTargetDragEvent event) { }   public void keyTyped(KeyEvent keyevent) { }

  public void drop(DropTargetDropEvent event)   {    if(getItemCount()>0 && msg.equals(getItem(0)))     remove(0);    event.acceptDrop(1);    Transferable transferable = event.getTransferable();    DataFlavor[] flavors = transferable.getTransferDataFlavors();    for (int i = 0; i < flavors.length; i++)    {     DataFlavor d = flavors[i];     try {      if (d.equals(DataFlavor.javaFileListFlavor))      {       java.util.List fileList = (java.util.List) transferable.getTransferData(d);       for (int j=0; j<fileList.size(); j++)        addFile(((File)fileList.get(j)).getAbsolutePath());      }     } catch (Exception e) { }    }   }

  public void keyPressed(KeyEvent keyevent) {    switch(keyevent.getKeyCode())    {    case KeyEvent.VK_CONTROL:     isCTRLdown=true;     break;    case KeyEvent.VK_SHIFT:     isShiftDown=true;     break;    case KeyEvent.VK_C:     if(isCTRLdown)     {      StringBuffer icsb = new StringBuffer();      String[] items = getSelectedItems();      for(int i=0; i<items.length; i++)       icsb.append(items[i]).append("\n");      StringSelection stsel = new StringSelection(icsb.toString());         Toolkit.getDefaultToolkit().getSystemClipboard().setContents(stsel, stsel);     }     break;    case KeyEvent.VK_A:     if(isCTRLdown)     {      for(int i=0; i<getItemCount(); i++)       select(i);     }     break;    case KeyEvent.VK_DELETE:     int[] selectedIndexes = getSelectedIndexes();     for(int i=selectedIndexes.length-1; i>=0; i--)      remove(selectedIndexes[i]);     if(getItemCount()==0)      add(msg);     break;    }   }

  public void keyReleased(KeyEvent keyevent) {    switch(keyevent.getKeyCode())    {    case KeyEvent.VK_CONTROL:     isCTRLdown=false;     break;    case KeyEvent.VK_SHIFT:     isShiftDown=false;     break;    }   }      public void itemStateChanged(ItemEvent itemevent) {    boolean hasOperation = false;    int currID=Integer.parseInt(itemevent.getItem().toString());    if(lastSelectItemID>-1 && isShiftDown)    {     for(int i=0; i<=getItemCount(); i++)     {      if((currID>lastSelectItemID && (i<lastSelectItemID || i>currID))        || (currID<lastSelectItemID && (i>lastSelectItemID || i<currID)))       deselect(i);      else       select(i);     }     hasOperation=true;    }    else if(isCTRLdown)    {     hasOperation=true;     if(itemevent.getStateChange()==ItemEvent.SELECTED)      lastSelectItemID=currID;    }    if(!hasOperation)    {     for(int i=0; i<getItemCount(); i++)     {      if(i==currID)       select(i);      else       deselect(i);     }     lastSelectItemID=currID;    }   }  } }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值