📄 findinjar.java
字号:
package mypack;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.Dimension;
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import java.awt.event.KeyEvent;
import javax.swing.JLabel;
import java.awt.Rectangle;
import javax.swing.JTextField;
import javax.swing.JList;
import javax.swing.JScrollPane;
import java.awt.Point;
import javax.swing.JButton;
import javax.swing.DefaultListModel;
import java.io.File;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.JViewport;
import java.net.URL;
import javax.swing.JEditorPane;
import javax.swing.SwingConstants;
import javax.swing.BorderFactory;
public class FindInJar {
private JFrame jFrame = null; // @jve:decl-index=0:visual-constraint="9,0"
private JPanel jContentPane = null;
private JMenuBar jJMenuBar = null;
private JMenu fileMenu = null;
private JMenuItem addMenuItem = null;
private JMenuItem searchMenuItem = null;
private JMenuItem exitMenuItem = null;
private JLabel foldersLabel = null;
private JLabel classLabel = null;
private JLabel injarLabel = null;
private JTextField classTextBox = null;
private JList foldersList = null;
private JList injarList = null;
private JButton addButton = null;
private JButton removeButton = null;
private JButton searchButton = null;
private JMenu helpMenu = null;
private JScrollPane jScrollPane1 = null;
private JScrollPane jScrollPane2 = null;
private DefaultListModel listModel1=null;
private DefaultListModel listModel2=null;
private JMenuItem removeMenuItem = null;
private JMenuItem helpMenuItem = null;
private JMenuItem aboutMenuItem = null;
private JMenu optionMenu = null;
private JCheckBoxMenuItem recurseMenuItem = null;
private JCheckBoxMenuItem fullclassMenuItem = null;
private JScrollPane jScrollPane3 = null;
private JTable jTable = null;
private String className; // @jve:decl-index=0:
private ArrayList jarFiles=new ArrayList(); // @jve:decl-index=0:
private boolean recurse=false;
private boolean fullclass=false;
private DefaultTableModel defaultTableModel=null;
private JFrame helpFrame = null; // @jve:decl-index=0:visual-constraint="637,61"
private JPanel helpContentPane = null;
private JScrollPane helpPane = null;
private JLabel totalFoundLabel = null;
private int totalFound=0;
private JFileChooser jfchooser=null;
public FindInJar(){
jfchooser=new JFileChooser();
jfchooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
jfchooser.setDialogTitle("选择文件/文件夹");
jfchooser.setApproveButtonText("选择");
jfchooser.setMultiSelectionEnabled(true);
MyFilter zipFilter=new MyFilter("zip","zip files(*.zip)");
jfchooser.addChoosableFileFilter(zipFilter);
MyFilter jarFilter=new MyFilter("jar","jar files(*.jar)");
jfchooser.addChoosableFileFilter(jarFilter);
MyFilter bothFilter = new MyFilter(new String[] {"zip", "jar"}, "zip and jar files(*.zip,*.jar)");
jfchooser.addChoosableFileFilter(bothFilter);
jfchooser.setFileFilter(jarFilter);
}
protected String getClassName(ZipEntry entry){
StringBuffer className=new StringBuffer(entry.getName().replace('/','.'));
return className.toString();
}
private void setClassName(String className){
this.className=className;
}
protected void search(String filepath,boolean recurse){
File f=new File(filepath);
if(f.isDirectory()){
File[] files=f.listFiles();
for(int i=0;i<files.length;i++){
if(recurse && files[i].isDirectory()){
search(files[i].getAbsolutePath(),recurse);
}else{
String filename=files[i].getAbsolutePath();
searchZipFile(filename);
}
}
}else if(f.isFile()){
searchZipFile(f.getPath());
}
}
private void searchZipFile(String filename){
try{
if(filename.endsWith(".jar") || filename.endsWith(".zip")){
ZipFile zip=new ZipFile(filename);
Enumeration entries=zip.entries();
while(entries.hasMoreElements()){
ZipEntry entry=(ZipEntry)entries.nextElement();
String thisClassName=getClassName(entry);
if(fullclass){
if(thisClassName.equals(this.className) || thisClassName.equals(this.className+".class")){
jarFiles.add(filename);
totalFound=totalFound+1;
}
}else{
if(thisClassName.endsWith("."+this.className) || thisClassName.endsWith("."+this.className+".class")){
jarFiles.add(filename+"/"+thisClassName);
totalFound=totalFound+1;
}
}
}
}
}catch(Exception e){
String msg=e.getMessage()+": "+filename;
jarFiles.add(msg);
}
}
/**
* This method initializes optionMenu
*
* @return javax.swing.JMenu
*/
private JMenu getOptionMenu() {
if (optionMenu == null) {
optionMenu = new JMenu();
optionMenu.setText("选项");
optionMenu.add(getRecurseMenuItem());
optionMenu.add(getFullclassMenuItem());
}
return optionMenu;
}
/**
* This method initializes recurseMenuItem
*
* @return javax.swing.JCheckBoxMenuItem
*/
private JCheckBoxMenuItem getRecurseMenuItem() {
if (recurseMenuItem == null) {
recurseMenuItem = new JCheckBoxMenuItem();
recurseMenuItem.setText("搜索子文件夹");
recurseMenuItem.addItemListener(new java.awt.event.ItemListener() {
public void itemStateChanged(java.awt.event.ItemEvent e) {
if(recurseMenuItem.isSelected())
recurse=true;
else
recurse=false;
}
});
}
return recurseMenuItem;
}
/**
* This method initializes fullclassMenuItem
*
* @return javax.swing.JCheckBoxMenuItem
*/
private JCheckBoxMenuItem getFullclassMenuItem() {
if (fullclassMenuItem == null) {
fullclassMenuItem = new JCheckBoxMenuItem();
fullclassMenuItem.setText("使用完整类名");
fullclassMenuItem.addItemListener(new java.awt.event.ItemListener() {
public void itemStateChanged(java.awt.event.ItemEvent e) {
if(fullclassMenuItem.isSelected())
fullclass=true;
else
fullclass=false;
}
});
}
return fullclassMenuItem;
}
/**
* This method initializes jScrollPane3
*
* @return javax.swing.JScrollPane
*/
private JScrollPane getJScrollPane3() {
if (jScrollPane3 == null) {
jScrollPane3 = new JScrollPane();
jScrollPane3.setSize(new Dimension(274, 220));
jScrollPane3.setLocation(new Point(308, 58));
jScrollPane3.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
jScrollPane3.setViewportView(getJTable());
}
return jScrollPane3;
}
/**
* This method initializes jTable
*
* @return javax.swing.JTable
*/
private JTable getJTable() {
if (jTable == null) {
defaultTableModel = new DefaultTableModel();
defaultTableModel.setColumnCount(0);
defaultTableModel.setRowCount(0);
defaultTableModel.addColumn("文件名");
defaultTableModel.addColumn("完整类名");
jTable = new JTable(defaultTableModel);
jTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
jTable.setShowGrid(true);
}
return jTable;
}
/**
* This method initializes helpFrame
*
* @return javax.swing.JFrame
*/
private JFrame getHelpFrame() {
if (helpFrame == null) {
helpFrame = new JFrame();
helpFrame.setSize(new Dimension(435, 506));
helpFrame.setTitle("帮助");
helpFrame.setResizable(false);
helpFrame.setContentPane(getHelpContentPane());
}
return helpFrame;
}
/**
* This method initializes helpContentPane
*
* @return javax.swing.JPanel
*/
private JPanel getHelpContentPane() {
if (helpContentPane == null) {
helpContentPane = new JPanel();
helpContentPane.setLayout(null);
helpContentPane.add(getHelpPane(), null);
}
return helpContentPane;
}
/**
* This method initializes helpPane
*
* @return javax.swing.JScrollPane
*/
private JScrollPane getHelpPane() {
if (helpPane == null) {
helpPane = new JScrollPane();
helpPane.setBounds(new Rectangle(0, 0, 430, 474));
}
return helpPane;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO 自动生成方法存根
FindInJar findjar=new FindInJar();
JFrame jf=findjar.getJFrame();
jf.setVisible(true);
}
/**
* This method initializes jScrollPane1
*
* @return javax.swing.JScrollPane
*/
private JScrollPane getJScrollPane1() {
if (jScrollPane1 == null) {
jScrollPane1 = new JScrollPane();
jScrollPane1.setLocation(new Point(10, 38));
jScrollPane1.setSize(new Dimension(274, 240));
jScrollPane1.setViewportView(getFoldersList());
}
return jScrollPane1;
}
/**
* This method initializes jScrollPane2
*
* @return javax.swing.JScrollPane
*/
private JScrollPane getJScrollPane2() {
if (jScrollPane2 == null) {
jScrollPane2 = new JScrollPane();
jScrollPane2.setLocation(new Point(308, 58));
jScrollPane2.setViewportView(getInjarList());
jScrollPane2.setSize(new Dimension(274, 220));
jScrollPane2.setVisible(true);
}
return jScrollPane2;
}
/**
* This method initializes removeMenuItem
*
* @return javax.swing.JMenuItem
*/
private JMenuItem getRemoveMenuItem() {
if (removeMenuItem == null) {
removeMenuItem = new JMenuItem();
removeMenuItem.setText("移除");
removeMenuItem.setActionCommand("移除");
removeMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
removeButton.getActionListeners()[0].actionPerformed(e);
}
});
}
return removeMenuItem;
}
/**
* This method initializes helpMenuItem
*
* @return javax.swing.JMenuItem
*/
private JMenuItem getHelpMenuItem() {
if (helpMenuItem == null) {
helpMenuItem = new JMenuItem();
helpMenuItem.setText("帮助");
helpMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
helpFrame=getHelpFrame();
JViewport vp=helpPane.getViewport();
URL url=helpContentPane.getClass().getResource("/readme.html");
try{
JEditorPane html=new JEditorPane(url);
html.setEditable(false);
vp.add(html);
helpFrame.setVisible(true);
}catch(Exception ex){
JOptionPane.showMessageDialog(jFrame, ex.getMessage(),"错误",JOptionPane.ERROR_MESSAGE);
}
}
});
}
return helpMenuItem;
}
/**
* This method initializes aboutMenuItem
*
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -