Winte Winte Winte Winte - 6 months ago 59
Java Question

Spring: how to parse uploaded zip file?

I uploaded my zip archive to the server and want to open

.txt
and
.jpg
files in it. I successfully get my archive in my Controller and get the name of each file via
ZipEntry
. Now I want to open it but for this I should get a full path to my file.

I haven't found how I can do that. Could you suggest some approach how to do that ?

Update

I try to use example have been suggested below but I am not be able open the file

ZipFile zFile = new ZipFile("trainingDefaultApp.zip");


I have got the
FileNotFoundException


So I return to my start point. I have upload form in Java Spring application. In controller I had got a zip archive as
byte[]


@RequestMapping(method = RequestMethod.POST)
public String create(UploadItem uploadItem, BindingResult bindingResult){
try {
byte[] zip = uploadItem.getFileData().getBytes();
saveFile(zip);


Then I had got each
ZipEntry


InputStream is = new ByteArrayInputStream(zip);
ZipInputStream zis = new ZipInputStream(is);

ZipEntry entry = null;
while ((entry = zis.getNextEntry()) != null) {
String entryName = entry.getName();
if (entryName.equals("readme.txt")) {
ZipFile zip = new ZipFile(entry.getName()); // here I had got an exception


According to docs I did all right but as for me it is strange to pass the file name only and suspect that you successfully will open the file

Answer

I resolve my uissue. The solution is work directly with ZipInputStream. Here the code:

    private void saveFile(byte[] zip, String name, String description) throws IOException {
    InputStream is = new ByteArrayInputStream(zip);
    ZipInputStream zis = new ZipInputStream(is);

    Application app = new Application();
    ZipEntry entry = null;
    while ((entry = zis.getNextEntry()) != null) {
        String entryName = entry.getName();
        if (entryName.equals("readme.txt")) { 
           new Scanner(zis); //!!!
           //... 
           zis.closeEntry();