0

我有一种情况,我需要读取 Jar 文件的内容并检查其中的内容。

我的问题是我可以读取内容 jar 文件,但我无法根据我的要求检查条目。

.xml我的要求是我应该允许具有,.png or .jpg or .jpeg和文件扩展名的 jars.MF这是我的代码。

JarFile connectorjarfile = new JarFile(jarFileStorageocation);
Enumeration<JarEntry> jarEntries1 = connectorjarfile.entries();
int count = 0;
while (jarEntries1.hasMoreElements()) {
    System.out.println("Before Jar Validation is going on");
    JarEntry jarEntry = (JarEntry) jarEntries1.nextElement();
    System.out.println(jarEntry.getName());
    String msg1 = "valid Jar File";
    String msg2 = "Invalid Jar File";

    if ((jarEntry.getName().endsWith(".png") || jarEntry.getName().endsWith(".jpg") || jarEntry.getName().endsWith(".jpeg")) || jarEntry.getName().endsWith(".xml") || jarEntry.getName().endsWith(".MF") || jarEntry.getName().equals("META-INF/")) {
        try {
            response.getWriter().write(msg1);
            break;
        } catch (Exception e) {
            e.printStackTrace();
        }
    } else {
        count++;

        try {
            response.getWriter().write(msg2);
            break;
        } catch (IOException e) {
            e.printStackTrace();
        }
        //break;
    }

If 循环执行了很多次,因为它会一一检查 Jar 文件的内容。我想一次检查一个,然后进入循环。建议我。

4

2 回答 2

1

我只想知道它是有效还是无效

然后,您只需要迭代直到找到无效文件。您需要更改代码的主要内容是将操作从if/else块移到循环- 在循环内,只需设置一个标志以指示您何时发现无效条目:

boolean isValid = true;
while (isValid && jarEntries1.hasMoreElements()) {
    JarEntry jarEntry = jarEntries1.nextElement();

    isValid = jarEntry.getName().endsWith(".png")  || jarEntry.getName().endsWith(".jpg") || 
              jarEntry.getName().endsWith(".jpeg") || jarEntry.getName().endsWith(".xml") || 
              jarEntry.getName().endsWith(".MF")   || jarEntry.getName().equals("META-INF/");
}

if (isValid) {
    // do whatever you want if the file is valid
} else {
    // do whatever you want if the file is not valid
}

边注:

您不需要显式地将结果从nextElement()to JarEntry- jarEntries1is already an Enumerationof type JarEntry

于 2013-06-24T12:51:31.277 回答
0

为什么需要统计所有无效的文件?你不能用类似的东西停止循环:

String name = jarEntry.getName()
if ! (name.endsWith(".png")....) {
   // invalid , let's stop
   break;
} 

在最坏的情况下,您必须只迭代一次。

于 2013-06-24T12:49:07.273 回答