如何阅读所有" .java"来自" .zip"的文件文件

时间:2017-09-14 11:29:54

标签: java zipfile

我想获取所有.java个文件,并将它们放在ArrayList个文件中。我已经使用ZipInputStream然后ZipEntry来迭代文件,但无法理解如何从ZipEntry获取文件。

public List<File> getJavaFiles(MultipartFile file){
    List<File> javaFiles = new ArrayList<File>();

    ZipEntry zipEntry;

    log.info("getJavaFiles");
    try {
        ZipInputStream zip;
        try {
            zip = new ZipInputStream( file.getInputStream());
            while((zipEntry = zip.getNextEntry()) != null){
                if(zipEntry.getName().endsWith(".java")){
                    log.info(zipEntry.getName());

                    //How do I put the java file in my array list
                }
            }
            zip.close();
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }


    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }


    return javaFiles;
}

4 个答案:

答案 0 :(得分:3)

以下是可以在zip files ::

中读取和打印.java文件的代码

您还可以使用此代码获取文件及其内容。

import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;

import org.apache.commons.io.IOUtils;

public class test {
    public static void main(String[] args) throws IOException {
        ZipFile zipFile = new ZipFile("test.zip");
        Enumeration<? extends ZipEntry> entries = zipFile.entries();
        System.out.println(entries);

        while(entries.hasMoreElements()){
            ZipEntry entry = entries.nextElement();
            System.out.println(entry.getName());
            if(entry.getName().contains("java")){
                InputStream stream = zipFile.getInputStream(entry);
                System.out.println(IOUtils.toString(stream, StandardCharsets.UTF_8));
            }
        }
    }
}

答案 1 :(得分:0)

也许您可以直接使用如下文件:

File javaFile = new File(zipEntry.getName());
javaFiles.add(javaFile); 

答案 2 :(得分:0)

请查看此代码

 ZipFile zipFile = new ZipFile("C:/test.zip");

Enumeration<? extends ZipEntry> entries = zipFile.entries();

while(entries.hasMoreElements()){
    ZipEntry entry = entries.nextElement();
    InputStream stream = zipFile.getInputStream(entry);
}

答案 3 :(得分:0)

如果您想要稍后遍历的文件列表,那么首先需要在某处提取文件。其他答案有如何获取输入流然后将其写入磁盘的示例,因此我不会重复这一点。

提取文件后,您可以使用对它们的引用来填充列表。

P.S。我猜你是为一个项目或其他东西做这个,但一般来说,像Sonarqube这样的工具在静态代码分析方面很棒。