我想获取所有.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;
}
答案 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这样的工具在静态代码分析方面很棒。