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 个评论
Jan
2011-7-6
What do you want to do with a zipped variable? Do you want to unzip one of the files only?
回答(4 个)
Bob Hamans
2011-7-6
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 个评论
Bob Hamans
2011-7-6
I added some documentation and submitted the function to the File Exchange
Ashish Uthama
2011-7-6
[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
2014-5-13
编辑:Oleg Komarov
2014-5-13
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.
Lars Janssen
2021-3-1
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
2023-3-21
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?
Robert Cumming
2011-7-6
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)
Brunno Machado de Campos
2018-1-11
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 个评论
Chris Piker
2020-5-6
I like it. Thanks! I'll look into the zip binary format a bit more.
Collin Pecora
2020-6-24
Allows for extracting specific file from a zip archive.
类别
在 帮助中心 和 File Exchange 中查找有关 Scope Variables and Generate Names 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!