No BSD License  

Highlights from
unzip file\s

from unzip file\s by Tal Pasi
An extention of MATLAB's unzip, which allows to extract one or more specified files ...

unzipfiles(zipFilename,files ,outputDirectory)
function unzipfiles(zipFilename,files ,outputDirectory)
%   UNZIPFILES Extract the contents of a zip file.
%
%   UNZIPFILES(ZIPFILE) 
%       extracts the contents of a zip file into the current 
%      directory.
%
%   UNZIPFILES(ZIPFILE,FILES) 
%       extracts the files specified in FILES, a string or a
%       a cell array of strings (one or more), from the zipped file
%       into the current directory.
%
%   UNZIPFILES(ZIPFILE,FILES,OUTPUTDIR)  
%       extracts the files specified in FILES, a string or a
%       a cell array of strings, from the zipped file
%       into the directory OUTPUTDIR
%
%   Examples:
%           unzipfiles('junk.zip')
%               will extract the entire contents of junk into the current 
%              current directory.
%          unzipfiles('junk.zip','temp1.mat') 
%               will extract "temp1.mat" into the current 
%              current directory.
%          unzipfiles('junk.zip','temp1.mat','c:\temp') 
%               will extract "temp1.mat" into c:\temp 
%          unzipfiles('junk.zip',[],'c:\temp') 
%               will extract the entire contents of junk into c:\temp
%
%   See also ZIP, UNZIP.


%   This file is an extention of  The MathWorks, Inc's
%   UNZIP function
%    
%   Author :    Tal Pasi
%   Date:     15-Oct-2004


import java.io.*;
import java.util.zip.ZipFile;
import com.mathworks.mlwidgets.io.InterruptibleStreamCopier;

% Argument parsing.
error(nargchk(1,3,nargin));
if (nargin == 1) || (nargin == 2) 
    outputDirectory = pwd;
elseif (nargin == 3) && ~exist(outputDirectory,'dir')
    error('Directory "%s" does not exist.',outputDirectory)
end

if (nargin == 1)
    allFiles =1;
else
    allFiles = 0;
    if isempty(files)
        allFiles = 1;
    else
        % number of files to unzip
        nFiles = size(files,1);
    end
end





% Open the Zip file.
if ~exist(zipFilename,'file')
    error('File "%s" does not exist.',zipFilename);
end
try
    zipFile = ZipFile(zipFilename);
catch
    error('Error opening zip file "%s".',zipFilename);
end

% This InterruptibleStreamCopier is unsupported and may change without notice.
interruptibleStreamCopier = ...
    InterruptibleStreamCopier.getInterruptibleStreamCopier;

% Inflate all entries.
enumeration = zipFile.entries;
while enumeration.hasMoreElements
    zipEntry = enumeration.nextElement;
    % Open output stream.
    if allFiles
        outputName = fullfile(outputDirectory,char(zipEntry.getName));
    else
        % find the wanted files
        for index = 1: nFiles
            if strcmp(zipEntry.getName , files{index})
                outputName = fullfile(outputDirectory,char(files{index}));
                break;
            end
        end
    end
    file = java.io.File(outputName);
    parent = File(file.getParent);
    parent.mkdirs;
    try
        fileOutputStream = java.io.FileOutputStream(file);
    catch
        error('Could not create "%s".',outputName);
    end
    % Extract entry to output stream.
    inputStream = zipFile.getInputStream(zipEntry);
    interruptibleStreamCopier.copyStream(inputStream,fileOutputStream);
    % Close streams.
    fileOutputStream.close;
    inputStream.close;
    
    end
    
end
% Close zip.
zipFile.close;

Contact us at files@mathworks.com