在好例子网,分享、交流、成长!
您当前所在位置:首页Java 开发实例常用工具方法 → 查看Class文件或JAR文件编译JDK版本

查看Class文件或JAR文件编译JDK版本

常用工具方法

下载此实例
  • 开发语言:Java
  • 实例大小:1.68KB
  • 下载次数:14
  • 浏览次数:384
  • 发布时间:2017-12-28
  • 实例类别:常用工具方法
  • 发 布 人:xxb_lu
  • 文件格式:.rar
  • 所需积分:2
 相关标签: 文件 c d 编译 jar

实例介绍

【实例简介】

直接将class文件或jar文件拖动到text中,可以显示编译的jdk版本


【实例截图】

【核心代码】


import java.awt.Toolkit;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.Enumeration;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;

import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.TransferHandler;

/*
 J2SE 8 = 52,
 J2SE 7 = 51,
 J2SE 6.0 = 50,
 J2SE 5.0 = 49,
 JDK 1.4 = 48,
 JDK 1.3 = 47,
 JDK 1.2 = 46,
 JDK 1.1 = 45
 */
public class ClassVersion extends JFrame {
	private JTextArea field;

	public static void main(String[] args) {
		new ClassVersion().showFrame();
	}

	private void showFrame() {
		int width = 800;
		int height = 600;
		this.setTitle("查看class版本");
		this.setSize(width, height);
		// this.setLocationRelativeTo(null);
		// this.setLayout(null);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		Toolkit toolkit = Toolkit.getDefaultToolkit();
		int x = (int) (toolkit.getScreenSize().getWidth() - this.getWidth()) / 2;
		int y = (int) (toolkit.getScreenSize().getHeight() - this.getHeight()) / 2;
		this.setLocation(x, y);
		field = new JTextArea();
		field.setBounds(50, 50, width, height);
		// field.setHorizontalAlignment(JTextField.);
		field.setTransferHandler(new TransferHandler() {
			@Override
			public boolean importData(JComponent comp, Transferable t) {
				try {
					Object o = t.getTransferData(DataFlavor.javaFileListFlavor);
					String filepath = o.toString();
					if (filepath.startsWith("[")) {
						filepath = filepath.substring(1);
					}
					if (filepath.endsWith("]")) {
						filepath = filepath.substring(0, filepath.length() - 1);
					}
					System.out.println(filepath);
					if (filepath.endsWith("jar")) {
						StringBuffer sb = new StringBuffer(filepath);
						sb.append(":\r\n");
						JarFile jar = new JarFile(filepath);
						for (Enumeration enumJar = jar.entries(); enumJar.hasMoreElements();) {
							JarEntry je = (JarEntry) enumJar.nextElement();
							if (je.getName().endsWith(".class")) {
								InputStream input = jar.getInputStream(je);
								sb.append(je.getName()).append(":").append(checkClassVersion(input)).append("\r\n");
							}
						}
						field.setText(sb.toString());
					} else {

						if (filepath.endsWith("class")) {
							filepath = filepath   ":"   checkClassVersion(new File(filepath));
						}
						field.setText(filepath);
					}
					return true;
				} catch (Exception e) {
					e.printStackTrace();
				}
				return false;
			}

			@Override
			public boolean canImport(JComponent comp, DataFlavor[] flavors) {
				for (int i = 0; i < flavors.length; i  ) {
					if (DataFlavor.javaFileListFlavor.equals(flavors[i])) {
						return true;
					}
				}
				return false;
			}
		});

		this.add(field);
		this.setVisible(true);
	}

	public static String checkClassVersion(InputStream in) throws Exception {
		byte[] data = new byte[8];
		// 读取文件前8字节
		// 实际上版本号写在第4-7字节上(从第0字节开始算)
		in.read(data, 0, 8);
		in.close();
		// 计算出class文件的主次版本号
		int minor_version = (((int) data[4]) << 8)   data[5];
		int major_version = (((int) data[6]) << 8)   data[7];
		return translateVersionToJDK(major_version);
	}

	/**
	 * 检查class文件的版本号
	 * 
	 * @param classFile
	 * @return 返回值为:JDK1.4 JDK1.5 ... 或者unknown
	 * @throws Exception
	 */
	public static String checkClassVersion(File classFile) throws Exception {
		FileInputStream in = new FileInputStream(classFile);
		return checkClassVersion(in);
	}

	/**
	 * 根据主版本号,转换成JDK版本 48是JDK1.4,49是JDK1.5,依次类推
	 * 
	 * @param major_version
	 * @return
	 */
	public static String translateVersionToJDK(final int major_version) {
		switch (major_version) {
		case 45:
			return "JDK1.1";
		case 46:
			return "JDK1.2";
		case 47:
			return "JDK1.1";
		case 48:
			return "JDK1.4";
		case 49:
			return "JDK1.5";
		case 50:
			return "JDK1.6";
		case 51:
			return "JDK1.7";
		case 52:
			return "JDK1.8";
		default:
			return "unknown";
		}
	}

}



标签: 文件 c d 编译 jar

实例下载地址

查看Class文件或JAR文件编译JDK版本

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警