2017-09-14 196 views
0

我想獲取所有.java文件並將它們放入文件的ArrayList中。我採取了ZipInputStream,然後ZipEntry遍歷文件,但不知道如何從ZipEntry獲取文件。如何從「.zip」文件中讀取所有「.java」文件

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; 
} 
+0

你想如何使用返回的'List '?它的目的是什麼? – Pshemo

+0

請檢查這種方式[鏈接](https://stackoverflow.com/a/36890475/1012497) – nikli

+0

我想獲得所有的java文件的評論和標識符來檢查代碼的氣味。 所以我想從這個類中獲取所有的java文件。然後處理這些文件(即獲取評論和標識符以檢查代碼味道)。 @Pshemo –

回答

0

也許你可以直接使用文件象下面這樣:

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

但是,這將不會有在zip文件中的文件的原始內容 –

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); 
} 
1

這裏檢查是可以讀取和打印拉鍊.java文件的代碼files ::

您還可以使用此代碼獲取文件及其內容。

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)); 
      } 
     } 
    } 
} 
+0

謝謝。這有很大幫助。 –

+0

但是,因爲我使用MultipartFile而不是ZipFile(儘管該文件實際上是一個zip文件),您能告訴我如何從中獲取字符串嗎? –

+0

你可以參考這個鏈接https://stackoverflow.com/questions/24339990/how-to-convert-a-multipart-file-to-file –

0

如果你想要一個你稍後將要遍歷的文件列表,那麼首先你需要在某個地方提取文件。其他答案有如何獲取輸入流並將其寫入磁盤的例子,所以我不會再重複。

一旦你提取的文件,然後你可以填充您的列表引用它們。

p.s.我猜測你正在爲一個項目做些什麼,但是一般來說,像Sonarqube這樣的工具在靜態代碼分析方面非常棒。