主要功能是搜索ZIP增量包里的所有文件 看是否有相应XML里配置的违规文件和检查.CLASS文件的JDK版本
main:
package main; import java.awt.Component; import java.awt.Dimension; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JRadioButton; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; /** * @author july * */ public class Files { /** * @return */ public void getFrame() { JFrame frame = new JFrame(); JPanel pane = new JPanel(); frame.setLayout(null); pane.setLayout(null); // 窗口位置调整 frame.setSize(800, 500); int windowWidth = frame.getWidth(); // 获得窗口宽 int windowHeight = frame.getHeight(); // 获得窗口高 Toolkit kit = Toolkit.getDefaultToolkit(); // 定义工具包 Dimension screenSize = kit.getScreenSize(); // 获取屏幕的尺寸 int screenWidth = screenSize.width / 2; // 获取屏幕的宽 int screenHeight = screenSize.height / 2; // 获取屏幕的高 frame.setLocation(screenWidth - windowWidth / 2, screenHeight - windowHeight / 2);// 窗口居中 JLabel lab1 = new JLabel(); lab1.setText("文件夹路径:"); lab1.setBounds(20, 5, 80, 40); final JLabel lab2 = new JLabel(); lab2.setText("检查jdk版本:"); lab2.setBounds(20, 65, 100, 40); String strJdk[] = { "请选择", "jdk1.4", "jdk1.5", "jdk1.6" }; final JComboBox cb = new JComboBox(strJdk); cb.setBounds(20, 100, 230, 30); final JTextArea inputTextbox = new JTextArea(); JScrollPane scrollPane; scrollPane = new JScrollPane(inputTextbox); inputTextbox.setEditable(true); scrollPane.setBounds(2, 180, 790, 275); final JTextField zhwb = new JTextField(); zhwb.setBounds(20, 35, 230, 30); zhwb.setEditable(true); final JRadioButton r3 = new JRadioButton("查找配置项中文件"); r3.setBounds(300, 100, 140, 30); r3.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if (r3.isSelected()) { cb.setVisible(false); lab2.setVisible(false); } else { cb.setVisible(true); lab2.setVisible(true); } } }); ; JButton button1 = new JButton("搜索"); button1.setBounds(360, 35, 60, 30); button1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { actionButton(zhwb, inputTextbox, cb, r3); } }); final Component cmpt = null; JButton chooseButton = new JButton("目录..."); chooseButton.setBounds(250, 35, 70, 30); chooseButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { JFileChooser chooser = new JFileChooser(); chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); // 只显示目录 chooser.setCurrentDirectory(new File(".")); int ret = chooser.showOpenDialog(cmpt); if (ret == JFileChooser.APPROVE_OPTION) { zhwb.setText(chooser.getSelectedFile().getPath()); } } }); pane.add(lab1); pane.add(lab2); pane.add(r3); pane.add(zhwb); pane.add(chooseButton); pane.add(button1); pane.setBounds(0, 0, 600, 180); frame.add(cb); frame.add(pane); frame.add(scrollPane); frame.setTitle("增量包检查工具"); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); frame.setVisible(true); } /** * @param zhwb * @param inputTextbox * @param cb * @param radio * @return * */ public void actionButton(JTextField zhwb, JTextArea inputTextbox, JComboBox cb, JRadioButton radio) { String strMassage = "此文件夹下无相应文件"; if ("".equals(zhwb.getText())) { strMassage = "请选择文件夹"; } else if (cb.getSelectedItem().toString().equals("请选择") && radio.isSelected() == false) { strMassage = "请选择查找类型(JDK版本或者文件)"; } if (!"".equals(zhwb.getText()) && (!cb.getSelectedItem().toString().equals("请选择") || radio .isSelected() == true)) { String str = new FilesService().search(zhwb.getText(), cb .getSelectedItem().toString(), radio.isSelected(), cb .getSelectedItem().toString()); if (str.equals("")) { if (radio.isSelected() == true) { strMassage = "此文件夹下无相应文件"; } else { strMassage = "此文件夹下无相应CLASS文件"; } } else { strMassage = str; } } inputTextbox.setText(strMassage); } /** * @param args */ public static void main(String[] args) { new Files().getFrame(); } }
逻辑处理:
package main; import java.io.File; import java.io.InputStream; import java.util.Enumeration; import java.util.Iterator; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader; /** * @author july * */ public class FilesService { /** * @param filesUrl * @param jdkVersion * @param boolRadio * @param radioText * @return * */ public String search(String filesUrl, String jdkVersion, boolean boolRadio, String radioText) { String str = "此文件夹下无相应文件"; if (boolRadio) { str = this.getFileNameList(filesUrl); } else { str = this.getSearchJdkResult(jdkVersion, filesUrl, radioText); } return str; } /** * 返回要检查的文件集合 * * @param filesUrl * * @return */ public String getFileNameList(String filesUrl) { StringBuffer strFileresult = new StringBuffer(""); String strFileUrl = new File("").getAbsolutePath() + "\\FileName.xml"; SAXReader saxReader = new SAXReader(); Document document; String strReuselt = ""; try { document = saxReader.read(new File(strFileUrl)); Iterator> iter = document.selectNodes("//file-name").iterator(); while (iter.hasNext()) { strReuselt = ""; Element elm = (Element) iter.next(); strReuselt = this.getSearchResult(elm.getText(), filesUrl); strFileresult.append(strReuselt); if (!"".equals(strReuselt)) { strFileresult.append("\n"); } } } catch (DocumentException e) { e.printStackTrace(); } return strFileresult.toString(); } /** * 返回查找结果 * * @param fileName * @param filesUrl * @param FilesUrl * @return */ public String getSearchResult(String fileName, String filesUrl) { ZipFile zip = null; String strFileResult = ""; StringBuffer strSearchResult = new StringBuffer(""); File[] entriesFile = new File(filesUrl).listFiles(); for (int i = 0; i < entriesFile.length; i++) { if (entriesFile[i].getName().indexOf(".zip") > 0 || entriesFile[i].getName().indexOf(".ZIP") > 0) { try { zip = new ZipFile(entriesFile[i]); Enumeration extends ZipEntry> entries = zip.entries(); while (entries.hasMoreElements()) { strFileResult = ""; ZipEntry entry = entries.nextElement(); String strName = ""; if (!entry.isDirectory()) { if (entry.getName().indexOf("\\") < 0) { strName = entry.getName(); } else { strName = entry.getName().substring( entry.getName().lastIndexOf("\\") + 1, entry.getName().length()); } if (strName.equals(fileName)) { strFileResult = fileName + "文件" + "存在于" + entriesFile[i].getName() + "中\n"; } } strSearchResult.append(strFileResult); } } catch (Exception e) { e.printStackTrace(); } } } return strSearchResult.toString(); } /** * * @param jdkVersion * @param filesUrl * @param radioText * @param fileName * @param FilesUrl * @return */ public String getSearchJdkResult(String jdkVersion, String filesUrl, String radioText) { ZipFile zip = null; StringBuffer strFileResult = new StringBuffer(""); File[] entriesFile = new File(filesUrl).listFiles(); for (int i = 0; i < entriesFile.length; i++) { if (entriesFile[i].getName().indexOf(".zip") > 0 || entriesFile[i].getName().indexOf(".ZIP") > 0) { try { zip = new ZipFile(entriesFile[i]); Enumeration extends ZipEntry> entries = zip.entries(); while (entries.hasMoreElements()) { ZipEntry entry = entries.nextElement(); if (!entry.isDirectory()) { if (entry.getName().indexOf(".class") > 0) { InputStream fis = zip.getInputStream(entry); int length = fis.available(); byte[] data = new byte[length]; fis.read(data); fis.close(); if (parseFile(data, jdkVersion)) { strFileResult.append("使用" + radioText + "编译的CLASS文件存在于:" + zip.getName() + "\n"); break; } } } } } catch (Exception e) { e.printStackTrace(); } } } return strFileResult.toString(); } /** * @param data * @param jdkVersion * @return */ private static boolean parseFile(byte[] data, String jdkVersion) { int minor_version = ((data[4]) << 8) + data[5]; int major_version = ((data[6]) << 8) + data[7]; String strVersion = major_version + "." + minor_version; if ("46.0".equals(strVersion)) { if (jdkVersion.equals("jdk1.4")) { return true; } } if ("49.0".equals(strVersion)) { if (jdkVersion.equals("jdk1.5")) { return true; } } if ("50.0".equals(strVersion)) { if (jdkVersion.equals("jdk1.6")) { return true; } } return false; } }