- 浏览: 49756 次
- 性别:
- 来自: 深圳
最新评论
-
txyhl:
给我也发一份吧,谢谢!
txyhl@126.com
CruiseControl(QA) -
wufengjun:
大侠好,最近我也在研究持续集成,但是我找不到这两个jar包,请 ...
CruiseControl(QA)
公司增量太多 为了保证质量 提高效率 开发了一个增量包检查工具
主要功能是搜索ZIP增量包里的所有文件 看是否有相应XML里配置的违规文件和检查.CLASS文件的JDK版本
main:
逻辑处理:
主要功能是搜索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; } }
- FilesSearch.rar (479.9 KB)
- 下载次数: 3
- dom4j.rar (474 KB)
- 下载次数: 1
发表评论
-
配置SSL证书让tomcat服务器接受HTTPS请求
2017-06-28 17:17 9091:申请SSL证书 https://yundun.con ... -
javamail发送exchange服务器邮箱解决方案
2015-09-23 11:51 1727导入jbex-examples.jar,jbex-javama ... -
为解压版Tomcat创建一个windows服务(修正版)
2013-08-30 17:06 830转自http://haolll230sss.blog.163. ... -
dom4j读写XML
2011-09-05 18:47 840package net.sourceforge.cru ... -
JAR资料整合
2011-04-21 11:29 839如何把 Java 程序编译成 .exe 文件?通常回答有两种: ... -
linux下解压RAR
2011-04-21 11:28 991下载RAR for Linux 4.0.0 运行linux终端 ... -
ORACLE常用语句整理
2011-04-12 12:59 765所有表里的字段类型统计 select * from ... -
SPRING注解事务失效处理汇总
2011-04-08 11:42 4967情况1: 在声明式事务和注解事务并存的情况下会出现注解事务失效 ... -
SPRING注解事务管理
2011-04-07 10:34 2948引用大家在使用spring的 ... -
HESSION的使用
2011-04-07 10:21 1284HESSION简介: Hessian 是由 cauch ... -
JUNIT测试方法
2011-04-07 10:06 13101.assertTrue/False([String mess ... -
导出EXCEL
2011-04-01 18:40 1064/** * 导出EXCLE * * @ ... -
Spring MVC控制流程
2010-11-10 17:26 10631、首先来配置一下DispatcherServlet: spr ... -
编码内容整理
2010-10-31 16:01 901response.setContentType 设置 ... -
日期格式的转换
2010-10-21 10:30 778字符串转日期: SimpleDateFormat ...
相关推荐
在这个"Android增量更新工具包.zip"中,可能包含了实现这一功能的相关组件和文档。 在Android开发中,实现增量更新的常见工具有APK Split、AAB(Android App Bundle)和各种第三方库。APK Split允许开发者根据设备...
在Android增量更新中,我们可以先将新版本的应用打成一个zip文件,然后使用bsdiff与用户设备上当前版本的应用进行比较,生成一个只包含变化部分的补丁文件。这个补丁文件会远小于完整的新版本应用,从而显著减少用户...
在【压缩包子文件的文件名称列表】中,"UpdatePackage"可能是一个表示增量更新包的文件名,它可能包含了按照上述步骤打包的所有变更文件。用户在接收这个更新包后,只需要解压并应用到他们的本地副本中,就可以获得...
这个“用于编程工具的增量解析系统___下载.zip”文件可能包含了一个名为“tree-sitter”的开源项目,这是一个现代的、高效的语法分析库,它能够进行增量解析。 Tree-sitter 是一种基于LL(1)的解析器生成器,它的...
`scheduler.jar` 文件很可能是包含了一个任务调度器的Java应用程序,用于安排Solr的定期更新任务。这种调度器可能基于Java的定时任务框架如Quartz或者Spring的TaskScheduler。它的工作原理是按照预设的时间间隔或...
`apk.zip`文件可能是一个原始的APK包,用于演示增量升级前后的对比,或者作为生成补丁的输入。 实现Android增量升级的工具有很多,比如阿里巴巴的AndFix、Facebook的DiffUtil以及Google的Instant Run等。其中,...
Gradle 2.4是该工具的一个较早版本,但即便如此,它依然包含了构建Android应用所需的关键功能。这个压缩包“gradle-2.4-all.zip”提供的是Gradle 2.4的完整发行版,适用于那些需要旧版本兼容性的项目。 描述中提到...
固件包通常为.zip格式,解压后会得到一系列的.img文件。 3. 连接设备:使用USB数据线将设备连接到电脑,确保设备已开启USB调试模式,并关闭屏幕锁定。 三、MiFlash工具的使用步骤 1. 启动MiFlash:运行安装好的...
MATLAB 是一个强大的数学计算软件,提供了丰富的数值分析工具,包括对矩阵运算的支持。在 MATLAB 中实现 I-SVD,可以有效地处理大规模数据集,并且能够灵活地适应数据的变化。 I-SVD 的基本思想是将数据矩阵 D 分解...
在本场景中,我们讨论的是一个名为"数据库备份工具.zip"的压缩包,它包含了用于在Windows环境下进行数据库备份的资源。这个工具利用批处理文件和系统任务计划程序实现定时备份,确保数据的安全性和可恢复性。 ...
这个过程通常需要一个合并工具,例如BsPatch,它能根据补丁文件将旧的APK文件更新为新的版本。BsPatch.zip可能就是这个工具的实现,开发者可以将其集成到Android应用中,执行增量更新的合并操作。 具体实现步骤如下...
这个"android增量更新demo(完整版).rar"包含了一个实现增量更新的示例项目,可以帮助开发者理解并实践这一技术。 1. **Android增量更新原理** 增量更新的基本思想是对比新旧两个应用版本的差异,然后只发送这些...
备份可以选择存储在压缩格式(.zip或.7 z)的。 2、还包括一个清理选项,将删除过时的备份文件和设置备份操作的详细日志记录。 Back4Sure不附带一个内置的调度功能,但可以让您在桌面上创建快捷方式,将自动运行...
每个账套对应一个独立的公司或者业务单位,因此,对于有多家公司或业务的大型企业,可能有多个账套需要管理。 批量备份的优势在于以下几个方面: 1. **效率提升**:传统的方式是一对一地手动备份每个账套,这在...
"Wy定时自动备份小工具 电脑文件备份.zip" 提供了一个方便的解决方案,它是一款专为个人电脑用户设计的定时自动备份软件。这款工具允许用户设置定期任务,以自动备份重要的文件和数据,避免因意外丢失或系统故障导致...
APK差分指的是对比新旧两个APK版本之间的差异,找出仅有的改动部分,然后将这些改动部分合并到旧版本APK上,生成一个较小的增量包。这种方式可以显著减少用户下载更新的大小,提升用户体验,尤其是在移动网络环境下...
标题 "kitty-1.zip" 暗示我们正在处理一个名为 "kitty-1" 的压缩文件,其格式为 ZIP。ZIP 是一种常见的文件压缩格式,用于将多个文件或目录打包成一个单一的可下载文件,以节省存储空间和方便传输。然而,由于描述仅...