相信很多人跟我一样,苦于在各种包之间,不知道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; } } }