一个寻找.jar 和.zip文件中class文件的工具

相信很多人跟我一样,苦于在各种包之间,不知道Class存在什么地方,为此,自己写了一个小工具,来寻找目录下的Class文件

 

支持 目录查询,支持带包路径查询

 

入口Entrance.java

package com.freud.looking;

import java.io.IOException;

/**
 * Entrance which contains Main Method
 * 
 * @author Freud
 * 
 */
public class Entrance {

	public static void main(String[] args) throws IOException {

		UIFrame entrance = new UIFrame();
		entrance.initThePanel();
		entrance.repaint();
	}
}


Logic.java

package com.freud.looking;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;

/**
 * 1. Get all the ended tails file 2. Validate the jar files which contains the
 * condition classes 3. Validate the zip files which contains the condition
 * classes
 * 
 * @author Freud
 * 
 */
public class Logic {

	/**
	 * Traversal all the file to get end with tail's file
	 * 
	 * @param file
	 *            Files
	 * @param tail
	 *            End tail
	 * @return Matched files
	 */
	public List<File> traversalFiles(File file, String tail) {

		List<File> files = new ArrayList<File>();

		if (file.isDirectory()) {
			for (File descendant : file.listFiles()) {

				for (File define : traversalFiles(descendant, tail)) {

					if (define.getName().endsWith(tail)) {
						files.add(define);
					}

				}
			}
		} else {

			if (file.getName().endsWith(tail)) {
				files.add(file);
			}

		}

		return files;

	}

	/**
	 * Validate the jar files for the condition classes
	 * 
	 * @param files
	 *            Jar file
	 * @param condition
	 *            Needed classes
	 * @return Validated files
	 * @throws IOException
	 */
	public Set<String> validateJarFile(List<File> files, String condition) throws IOException {

		Set<String> flag = new HashSet<String>();

		for (File file : files) {

			try {
				JarFile jarFile = null;
				try {
					jarFile = new JarFile(file);

					Enumeration<JarEntry> jarentrys = jarFile.entries();

					while (jarentrys.hasMoreElements()) {

						JarEntry jarEntry = (JarEntry) jarentrys.nextElement();

						String name = jarEntry.getName().replace("/", ".").replace("\\", ".");

						if (name.contains(condition)) {
							flag.add(jarFile.getName());
						}

						if (name.contains(condition.replace("/", "."))) {
							flag.add(jarFile.getName());
						}

						if (name.contains(condition.replace("\\", "."))) {
							flag.add(jarFile.getName());
						}

					}

				} finally {
					if (jarFile != null)
						jarFile.close();
				}
			} catch (Exception e) {
				System.out.println("Error Occured in File - " + file.getAbsolutePath());
			}
		}
		return flag;
	}

	/**
	 * Validate the zip files for the condition classes
	 * 
	 * @param files
	 *            Zip file
	 * @param condition
	 *            Needed classes
	 * @return Validated files
	 * @throws IOException
	 */
	public Set<String> validateZipFile(List<File> files, String condition) throws IOException {

		Set<String> flag = new HashSet<String>();

		for (File file : files) {
			try {
				ZipFile zipFile = null;
				try {
					zipFile = new ZipFile(file);

					@SuppressWarnings("unchecked")
					Enumeration<ZipEntry> zipentrys = (Enumeration<ZipEntry>) zipFile.entries();

					while (zipentrys.hasMoreElements()) {

						ZipEntry zipEntry = (ZipEntry) zipentrys.nextElement();

						String name = zipEntry.getName().replace("/", ".").replace("\\", ".");

						if (name.contains(condition)) {
							flag.add(zipFile.getName());
						}

						if (name.contains(condition.replace("/", "."))) {
							flag.add(zipFile.getName());
						}

						if (name.contains(condition.replace("\\", "."))) {
							flag.add(zipFile.getName());
						}
					}
				} finally {
					if (zipFile != null) {
						zipFile.close();
					}
				}

			} catch (Exception e) {
				System.out.println("Error Occured in File - " + file.getAbsolutePath());
			}
		}
		return flag;
	}
}

 

UIFrame.java

package com.freud.looking;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

/**
 * Show the main component and do Submit logic
 * 
 * @author Freud
 * 
 */
public class UIFrame extends JFrame {

	/**
	 * serialVersionUID
	 */
	private static final long serialVersionUID = 1L;

	/**
	 * Components For the main frame
	 */
	private JLabel pathLable;
	private JTextField pathField;
	private JLabel conditionLable;
	private JTextField conditionField;
	private JLabel tailLabel;
	private JCheckBox jarCheckBox;
	private JCheckBox zipCheckBox;
	private JLabel resultLabel;
	private JTextField resultField;
	private JButton submit;

	/**
	 * Constructor
	 */
	public UIFrame() {

		/**
		 * Main Frame initialization
		 */
		this.setTitle("Looking for Classes!");
		this.setVisible(true);
		this.setBounds(100, 100, 400, 300);
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		this.setLayout(null);

	}

	/**
	 * Initialization the main panel's components
	 * 
	 * @return status
	 */
	public boolean initThePanel() {

		try {

			/**
			 * Location defined
			 */
			pathLable = new JLabel("Path Of the Location!");
			pathLable.setBounds(10, 10, 350, 20);

			pathField = new JTextField();
			pathField.setBounds(10, 40, 350, 30);

			tailLabel = new JLabel("Tails");
			tailLabel.setBounds(10, 80, 350, 20);

			jarCheckBox = new JCheckBox(".jar", true);
			jarCheckBox.setBounds(10, 110, 50, 30);

			zipCheckBox = new JCheckBox(".zip");
			zipCheckBox.setBounds(60, 110, 80, 30);

			conditionLable = new JLabel("Condition");
			conditionLable.setBounds(170, 80, 100, 20);

			conditionField = new JTextField();
			conditionField.setBounds(170, 110, 150, 30);

			resultLabel = new JLabel("Result Show --");
			resultLabel.setBounds(10, 150, 350, 20);

			resultField = new JTextField();
			resultField.setBounds(10, 180, 350, 30);

			submit = new JButton("Submit");
			submit.setBounds(120, 220, 100, 30);
			submit.addActionListener(new ActionListener() {

				/**
				 * Submit operations
				 */
				@Override
				public void actionPerformed(ActionEvent e) {

					try {
						String tail = "";
						String condition = conditionField.getText();

						Logic logic = new Logic();

						StringBuffer sb = new StringBuffer();

						/**
						 * Check the jar file box
						 */
						if (jarCheckBox.isSelected()) {

							tail = ".jar";

							/**
							 * Get all files ended with ".jar"
							 */
							List<File> files = logic.traversalFiles(new File(pathField.getText()), tail);

							int i = 0;

							/**
							 * Validate the files which have the condition
							 * classes
							 */
							for (String item : logic.validateJarFile(files, condition)) {
								if (i == 0) {
									sb.append(item);
								} else {
									sb.append(";").append(item);
								}

								i++;

							}
						}

						/**
						 * Check the zip file box
						 */
						if (zipCheckBox.isSelected()) {

							tail = ".zip";

							/**
							 * Get all files ended with ".zip"
							 */
							List<File> files = logic.traversalFiles(new File(pathField.getText()), tail);

							/**
							 * Validate the files which have the condition
							 * classes
							 */
							for (String item : logic.validateZipFile(files, condition)) {
								if (sb.toString().equals("")) {
									sb.append(item);
								} else {
									sb.append(";").append(item);
								}
							}
						}

						/**
						 * If no files contains
						 */
						if (sb.toString().equals("")) {
							sb.append("No matched file find!");
						}

						/**
						 * Set result field
						 */
						resultField.setText(sb.toString());

					} catch (Exception e1) {
						/**
						 * Error handling
						 */
						resultField.setText("Error Occured : " + e1.getMessage());
					}

				}
			});

			this.add(pathLable);
			this.add(pathField);
			this.add(conditionLable);
			this.add(conditionField);
			this.add(tailLabel);
			this.add(jarCheckBox);
			this.add(zipCheckBox);
			this.add(resultLabel);
			this.add(resultField);
			this.add(submit);

			this.repaint();

			return true;

		} catch (Exception e) {
			return false;
		}
	}
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值