MATLAB Answers

Read files in zip file without unzipping

352 views (last 30 days)
Etienne  Coetzee
Etienne Coetzee on 5 Jul 2011
Commented: Collin Pecora on 24 Jun 2020 at 15:22
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 Comment

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

Sign in to comment.

Answers (4)

Bob Hamans
Bob Hamans on 6 Jul 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

  3 Comments

Bob Hamans
Bob Hamans on 6 Jul 2011
I added some documentation and submitted the function to the File Exchange
Ashish Uthama
Ashish Uthama on 6 Jul 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 on 13 May 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.

Sign in to comment.


Etienne  Coetzee
Etienne Coetzee on 6 Jul 2011
Ok, thanks Robert. I will log it as an enhancement.

  0 Comments

Sign in to comment.


Robert Cumming
Robert Cumming on 6 Jul 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)

  0 Comments

Sign in to comment.


Brunno Machado de Campos
Brunno Machado de Campos on 11 Jan 2018
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 Comments

Chris Piker
Chris Piker on 6 May 2020
I like it. Thanks! I'll look into the zip binary format a bit more.

Sign in to comment.

Tags


Translated by