Search code examples
matlabzipunzip

Read the data of CSV file inside Zip File without extracting the contents in Matlab


I have number of Zip Files {'File1.zip', 'File2.zip', 'File3.zip',..., 'FileN.zip'} in which each zip file contains a Data.csv file. I want to read the data in 'Data.csv' of each Zip file without having to extract the Zip files' contents. Is this possible..?


Solution

  • Certainly Winzip / 7zip / Winrar do not have COM interface component which can invoke directly unlike word, excel an other application.

    Hence @Java is appropriate

    Idea is don't extract files physically , however create absolute path of file such that windows consider as physical presence of File (similar to ~tmp file)

    here the code

    zipFilename = 'Ex.zip';
    zipJavaFile  = java.io.File(zipFilename);
    

    % Create a Java ZipFile

     zipFile = org.apache.tools.zip.ZipFile(zipJavaFile);
    

    % Extract the entries from the ZipFile.

     entries = zipFile.getEntries;
     cnt = 1;
    

    % Get Zip File Paths

     while entries.hasNext
       tempObj = entries.nextElement;
       file{cnt,1} = tempObj.getName.toCharArray';
       cnt = cnt+ 1;
     end
    

    % Extract File Name

     ind = regexp(file,'$*.csv$');
     ind = find(~cellfun(@isempty,ind));  % Find Non Empty Cell Index
     file = file(ind);
    

    % Create Absolute Path so that Windows consider as Directory

      file = cellfun(@(x) fullfile('.',x),file,'UniformOutput',false);
    

    % Now Operate Any thing on File.