Read files in zip file without unzipping

Hi there
I have a zip file with about 100 binary files in. I have a routine to read the files into matlab variables. Is there a way that I can read the files directly without unpacking the zip file?
Thanks in advance.
Etienne

1 comentario

Jan
Jan el 6 de Jul. de 2011
What do you want to do with a zipped variable? Do you want to unzip one of the files only?

Iniciar sesión para comentar.

Respuestas (4)

Bob Hamans
Bob Hamans el 6 de Jul. de 2011
Hi Etienne. I don't know if I understand your question but you just want to list the zip file contents without unzipping? The following code does just that:
function filelist = listzipcontents(zipFilename)
% Create a Java file of the ZIP filename.
zipJavaFile = java.io.File(zipFilename);
% Create a Java ZipFile and validate it.
zipFile = org.apache.tools.zip.ZipFile(zipJavaFile);
% Extract the entries from the ZipFile.
entries = zipFile.getEntries;
% Initialize the file list.
filelist={};
% Loop through the entries and add to the file list.
while entries.hasMoreElements
filelist = cat(1,filelist,char(entries.nextElement));
end
end

5 comentarios

Bob Hamans
Bob Hamans el 6 de Jul. de 2011
I added some documentation and submitted the function to the File Exchange
Ashish Uthama
Ashish Uthama el 6 de Jul. de 2011
[Move as comment - AU]
Hi Bob
I actualy meant that I would like to read the contents of the files directly without having to unzip the file. It is easy enough to unzip and zip the files. I just wanted to see if there is an alternative.
Regards
Etienne
Oleg Komarov
Oleg Komarov el 13 de Mayo de 2014
Editada: Oleg Komarov el 13 de Mayo de 2014
The comment is ambiguous but the code does list the content WITHOUT unzipping.
In other words:
entries = zipFile.getEntries;
does not unzip the content.
The submission can be found on http://www.mathworks.co.uk/matlabcentral/fileexchange/32089-listzipcontents and this should be included with unzip() as an enhancement.
For those using the code snippet above, please add:
zipFile.close
This will "unlock" the java file again. After having some trouble deleting the zip file I found this missing piece of code here:Extracting specific file from zip in matlab - Stack Overflow.
Mark Gugliuzza
Mark Gugliuzza el 21 de Mzo. de 2023
Does anyone know if it is possible to perform this recursively? I have zips within zips that I need to read all the file names out of?

Iniciar sesión para comentar.

Etienne Coetzee
Etienne Coetzee el 6 de Jul. de 2011

1 voto

Ok, thanks Robert. I will log it as an enhancement.
Robert Cumming
Robert Cumming el 6 de Jul. de 2011
have you seen this thread - you could try what it suggests in your own copy of unzip.m - or send an enhancement request to Mathworks.
Its actually quite easy to update the m file(s):
1. Change the number of accepted input arguments to 3.
2. Handle the third input agument (say a cell array of requested files) or set to default (empty cell array)
3. Pass the 3rd argument into the private function extractArchive
4. In the private function do a strcmp on the entryName and your cell array of requested file(s) - if match found extract, if not skip to next (use continue in the while loop)
Hi, If anyone is until interested, for zip, on Windows (where I tested):
a = fopen('ZIPFILENAME.zip','r');
c2 = fread(a,'uint8=>uint8');
zipname = char(c2(31:31+c2(27)-1));
zipname = strcat(zipname')

2 comentarios

Chris Piker
Chris Piker el 6 de Mayo de 2020
I like it. Thanks! I'll look into the zip binary format a bit more.
Collin Pecora
Collin Pecora el 24 de Jun. de 2020
Allows for extracting specific file from a zip archive.

Iniciar sesión para comentar.

Categorías

Más información sobre Scope Variables and Generate Names en Centro de ayuda y File Exchange.

Etiquetas

Preguntada:

el 5 de Jul. de 2011

Comentada:

el 21 de Mzo. de 2023

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by