在Zip文件中读取CSV文件的数据,而不在Matlab中提取内容

时间:2014-04-17 10:51:10

标签: matlab zip unzip

我有多个Zip文件{'File1.zip', 'File2.zip', 'File3.zip',..., 'FileN.zip'},其中每个zip文件包含一个Data.csv文件。我想读取每个Zip文件的'Data.csv'中的数据,而不必提取Zip文件的内容。这可能吗??

1 个答案:

答案 0 :(得分:2)

当然Winzip / 7zip / Winrar没有可以直接调用的COM接口组件,不像其他应用程序。

因此@Java是合适的

理念是不要在物理上提取文件,但要创建文件的绝对路径,以便windows视为文件的物理存在(类似于~tmp文件)

这里是代码

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

%创建Java ZipFile

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

%从ZipFile中提取条目。

 entries = zipFile.getEntries;
 cnt = 1;

%获取Zip文件路径

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

%提取文件名

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

%创建绝对路径,以便Windows将其视为目录

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

%现在在文件上操作任何东西。