JAVA小小的程序2之文件MD5值校验器V0.1

简介:    上次写字符串MD5值计算器之后没多久写的。现在把代码贴上吧。   基本和前面的字符串MD5计算器一致,只对其作了小量修改。代码如下:界面及按钮相关功能: import javax.

   上次写字符串MD5值计算器之后没多久写的。现在把代码贴上吧。

  基本和前面的字符串MD5计算器一致,只对其作了小量修改。

代码如下:

界面及按钮相关功能:

import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.io.File; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class MainPanel extends JFrame{ File file; private String inString; private String compareString; private String outputString; static JTextField inputText = new JTextField(); static JTextField outputText = new JTextField(); static JTextField compareText = new JTextField(); static JButton fileChoose = new JButton("打开文件"); static JButton compare = new JButton("比较"); static JButton empty = new JButton("清空"); static JButton freeback = new JButton("意见反馈"); // create main user interface MainPanel() { super("MD5校验器 V0.1"); setSize(320, 160); setResizable(false); setLocationRelativeTo(null); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); NewAction newAction = new NewAction(); JPanel jp = new JPanel(); jp.setLayout(new BorderLayout()); JPanel labels = new JPanel(); labels.setLayout(new GridLayout(3, 1)); labels.add(new JLabel(" 文件选择")); labels.add(new JLabel(" MD5值 ")); labels.add(new JLabel(" 参考值 ")); JPanel texts = new JPanel(); GridLayout textLayout = new GridLayout(3, 1); textLayout.setVgap(5); texts.setLayout(textLayout); inputText.setEditable(false); outputText.setEditable(false); texts.add(inputText); texts.add(outputText); texts.add(compareText); JPanel buttons = new JPanel(); /* FlowLayout buttonsLay = new FlowLayout(); buttonsLay.setHgap(5); buttons.setLayout(buttonsLay); */ fileChoose.addActionListener(newAction); compare.addActionListener(newAction); empty.addActionListener(newAction); freeback.addActionListener(newAction); buttons.add(fileChoose); buttons.add(compare); buttons.add(empty); buttons.add(freeback); jp.add(labels, BorderLayout.WEST); jp.add(texts, BorderLayout.CENTER); jp.add(buttons, BorderLayout.SOUTH); setContentPane(jp); } public static void main(String[] args) { MainPanel panel = new MainPanel(); panel.setVisible(true); } // implements functions of buttons class NewAction implements ActionListener { public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub JButton button = (JButton) e.getSource(); if ( button == fileChoose) { // 文件选择 JFileChooser chooser = new JFileChooser(); int returnVal = chooser.showOpenDialog(fileChoose); if ( JFileChooser.APPROVE_OPTION == returnVal) { file = chooser.getSelectedFile(); inString = file.getName(); inputText.setText(inString); MainAlgorithm md5 = new MainAlgorithm(file); outputString = md5.compute(); outputText.setText(outputString); } } else if (button == compare) { // MD5值比较 if (outputText.getText().equals("")) { JOptionPane.showMessageDialog(null, "请先计算"); } else { // if md5 values are the same if (outputText.getText().equals(compareText.getText())) { JOptionPane.showMessageDialog(null, "MD5值相同"); } else {// md5 values are different JOptionPane.showMessageDialog(null, "MD5值不同"); } } } else if (button == empty) { // 重新初始化 inputText.setText(null); outputText.setText(null); compareText.setText(null); file = null; inString = null; outputString = null; compareString = null; } else { // 反馈问题 try { BareBonesBrowserLaunch.browse("http://blog.sina.com.cn/" + "s/blog_03f9d36e0100qjqp.html"); } catch (IllegalArgumentException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (ClassNotFoundException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (IllegalAccessException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (InterruptedException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (InvocationTargetException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (NoSuchMethodException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } } } } /*以下用浏览器打开指定网页的代码采用自互联网,网址没记下来,现在找不到,望原作见谅 */ // open URL with a browser class BareBonesBrowserLaunch { public static void openURL(String url) { try { browse(url); } catch (Exception e) { JOptionPane.showMessageDialog(null, "Error attempting to launch web browser:/n" + e.getLocalizedMessage()); } } static void browse(String url) throws ClassNotFoundException, IllegalAccessException, IllegalArgumentException, InterruptedException, InvocationTargetException, IOException, NoSuchMethodException { String osName = System.getProperty("os.name", ""); if (osName.startsWith("Mac OS")) { Class fileMgr = Class.forName("com.apple.eio.FileManager"); Method openURL = fileMgr.getDeclaredMethod("openURL", new Class[] { String.class }); openURL.invoke(null, new Object[] { url }); } else if (osName.startsWith("Windows")) { Runtime.getRuntime().exec( "rundll32 url.dll,FileProtocolHandler " + url); } else { // assume Unix or Linux String[] browsers = { "firefox", "opera", "konqueror", "epiphany", "mozilla", "netscape" }; String browser = null; for (int count = 0; count < browsers.length && browser == null; count++) if (Runtime.getRuntime() .exec(new String[] { "which", browsers[count] }) .waitFor() == 0) browser = browsers[count]; if (browser == null) throw new NoSuchMethodException("Could not find web browser"); else Runtime.getRuntime().exec(new String[] { browser, url }); } } } 计算文件MD5值的实现:

 import java.io.*; import java.security.*; import javax.swing.JOptionPane; public class MainAlgorithm { MessageDigest md5; File file; MainAlgorithm( File inFile) { try { this.file = inFile; md5 = MessageDigest.getInstance("MD5"); } catch (NoSuchAlgorithmException e) { // TODO Auto-generated catch block e.printStackTrace(); } } String compute () { FileInputStream fis = null; try { fis = new FileInputStream(file); } catch (FileNotFoundException e) { // TODO Auto-generated catch block JOptionPane.showMessageDialog(null, "Couldn't find the file."); e.printStackTrace(); } byte[] input = new byte[1024]; int hasRead = 0; try { hasRead = fis.read(input); while ( hasRead > 0) { md5.update(input, 0, hasRead); hasRead = fis.read(input); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { fis.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } byte[] result = md5.digest(); StringBuffer valueHex = new StringBuffer(); for ( int i = 0, tmp = 0; i < result.length; i++) { tmp = result[i] & 0xff; if ( tmp < 16) { valueHex.append(0); } valueHex.append(Integer.toHexString(tmp)); } return valueHex.toString(); } }

目录
相关文章
|
人工智能 监控 安全
智慧工地解决方案,java智慧工地程序代码
智慧工地系统融合物联网、AI、大数据等技术,实现对施工现场“人、机、料、法、环”的全面智能监控与管理,提升安全、效率与决策水平。
426 2
|
安全 Java
Java异常处理:程序世界的“交通规则
Java异常处理:程序世界的“交通规则
470 98
|
Java Unix Go
【Java】(8)Stream流、文件File相关操作,IO的含义与运用
Java 为 I/O 提供了强大的而灵活的支持,使其更广泛地应用到文件传输和网络编程中。!但本节讲述最基本的和流与 I/O 相关的功能。我们将通过一个个例子来学习这些功能。
474 1
|
监控 Java API
Java语言按文件创建日期排序及获取最新文件的技术
这段代码实现了文件创建时间的读取、文件列表的获取与排序以及获取最新文件的需求。它具备良好的效率和可读性,对于绝大多数处理文件属性相关的需求来说足够健壮。在实际应用中,根据具体情况,可能还需要进一步处理如访问权限不足、文件系统不支持某些属性等边界情况。
645 14
|
存储 Java 编译器
对比Java学习Go——程序结构与变量
本节对比了Java与Go语言的基础结构,包括“Hello, World!”程序、代码组织方式、入口函数定义、基本数据类型及变量声明方式。Java强调严格的面向对象结构,所有代码需置于类中,入口方法需严格符合`public static void main(String[] args)`格式;而Go语言结构更简洁,使用包和函数组织代码,入口函数为`func main()`。两种语言在变量声明、常量定义、类型系统等方面也存在显著差异,体现了各自的设计哲学。
464 0
|
存储 Java 数据安全/隐私保护
Java技术栈揭秘:Base64加密和解密文件的实战案例
以上就是我们今天关于Java实现Base64编码和解码的实战案例介绍。希望能对你有所帮助。还有更多知识等待你去探索和学习,让我们一同努力,继续前行!
1027 5
|
存储 Java 编译器
深入理解Java虚拟机--类文件结构
本内容介绍了Java虚拟机与Class文件的关系及其内部结构。Class文件是一种与语言无关的二进制格式,包含JVM指令集、符号表等信息。无论使用何种语言,只要能生成符合规范的Class文件,即可在JVM上运行。文章详细解析了Class文件的组成,包括魔数、版本号、常量池、访问标志、类索引、字段表、方法表和属性表等,并说明其在Java编译与运行过程中的作用。
457 0
|
前端开发 Cloud Native Java
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
|
存储 人工智能 Java
java之通过Http下载文件
本文介绍了使用Java实现通过文件链接下载文件到本地的方法,主要涉及URL、HttpURLConnection及输入输出流的操作。
930 0