2017-09-14 7 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

に確認してくださいここでzipファイルに.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)); 
      } 
     } 
    } 
} 
+0

ありがとう。これは大いに役立ちます。 –

+0

しかし、私はZipFileの代わりにMultipartFileを使用しているので(ファイルは実際にはzipファイルですが)、文字列を取得する方法を教えてください。 –

+0

このリンクを参照できます。https://stackoverflow.com/questions/24339990/how-to-convert-a-multipart-file-to-file –

0

後でトラバースするファイルのリストが必要な場合は、まずファイルをどこかに抽出する必要があります。他の回答には、入力ストリームをフェッチしてディスクに書き込む方法の例がありますので、私はそれを繰り返さないでください。

ファイルを解凍したら、それらのファイルへの参照を入力することができます。

p.s.私はあなたがプロジェクトや何かのためにこれをやっていると推測していますが、Sonarqubeのような一般的なツールでは静的なコード解析が素晴らしいです。

関連する問題