一个检查ZIP格式增量包的小工具

公司增量太多 为了保证质量 提高效率 开发了一个增量包检查工具
主要功能是搜索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;
}
}

### 回答1: gradle-6.8.1-all.zip是Gradle构建工具一个版本。Gradle是一个开源的构建自动化工具,用于构建、测试和部署软件项目。它采用基于Groovy或Kotlin的领域特定语言(DSL)来定义和配置项目构建。gradle-6.8.1-all.zip是Gradle 6.8.1版本的一个完整的发行括所有Gradle的核心组件和插件。 使用gradle-6.8.1-all.zip,可以轻松地在项目中使用Gradle进行构建。只需下载并解压该zip文件,然后在项目中配置正确的Gradle路径,即可开始使用该版本的Gradle。该发行含了Gradle的运行时环境和所有的依赖项,可以保证在各种操作系统上都能正常运行。 使用Gradle进行构建可以带来很多好处。它提供了强大的依赖管理功能,可以自动下载和管理项目所需的依赖库。同时,它支持多项目构建,可以将一个大型项目划分为多个子项目来简化构建过程。此外,Gradle还支持增量构建,可以只重新构建那些发生了变化的代码模块,提高了构建的效率。 总之,gradle-6.8.1-all.zip是Gradle构建工具6.8.1版本的一个完整发行,可以帮助开发者更方便地使用Gradle进行项目构建和自动化。 ### 回答2: Gradle是一种开源的构建工具,用于自动化构建、测试和部署软件项目。gradle-6.8.1-all.zip是Gradle 6.8.1版本的压缩文件,其中含了Gradle构建工具的所有必要文件。 使用gradle-6.8.1-all.zip,我们可以在本地环境中安装Gradle,并开始使用它来管理和构建项目。首先,我们需要下载gradle-6.8.1-all.zip文件,然后将其解压到任意目录中。 解压后,我们可以在解压目录中找到bin文件夹。在bin文件夹中,有一些Gradle的可执行文件,例如gradle.bat(Windows系统)和gradle(Linux和macOS系统)。我们可以使用这些可执行文件来执行Gradle的各种任务。 Gradle支持使用Groovy或Kotlin等语言来定义项目的构建脚本。我们可以创建一个名为build.gradle的文件,并在文件中编写Gradle构建脚本。 Gradle使用基于任务的方法来构建项目。我们可以通过运行gradle命令来执行各种Gradle任务。例如,我们可以运行gradle build命令来构建整个项目,gradle test命令来运行测试等。 gradle-6.8.1-all.zip文件中还含了Gradle的文档和示例项目。我们可以查阅文档来了解如何使用Gradle的各种功能,同时也可以参考示例项目来学习如何编写构建脚本。 总之,gradle-6.8.1-all.zip是Gradle构建工具一个版本的压缩文件,安装和使用它可以帮助我们更方便地管理和构建软件项目。 ### 回答3: gradle-6.8.1-all.zip 是 Gradle 构建工具一个安装。Gradle 是一种基于 Groovy 语言的开源构建自动化工具,用于帮助开发人员在各种项目中自动化构建、测试和部署应用程序。 gradle-6.8.1-all.zip 括了 Gradle 6.8.1 版本的所有文件和依赖项。这个可以用于在本地环境中安装 Gradle,以便项目可以使用 Gradle 来构建和管理项目的依赖关系。 要使用 gradle-6.8.1-all.zip,首先需要下载这个文件并解压缩。然后可以配置系统环境变量,指定 Gradle 的安装路径。之后就可以使用命令行或集成开发环境(IDE)来调用 Gradle 的命令,执行各种构建任务。 使用 Gradle 6.8.1,开发人员可以通过编写 Groovy 或 Kotlin 脚本来定义项目的构建脚本。这些脚本可以含任务、依赖关系、属性等定义,以及其他自定义逻辑。通过 Gradle,开发人员可以轻松地构建、测试和部署他们的应用程序,还可以管理项目中的依赖关系并执行其他构建任务,如代码检查、单元测试等。 总之,gradle-6.8.1-all.zip一个含了 Gradle 6.8.1 版本的所有文件和依赖项的压缩,可以用于安装和配置 Gradle 构建工具,从而帮助开发人员进行项目的构建自动化与管理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值