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

读取Zip文件中的CSV文件数据,无需在Matlab中提取内容,matlab,zip,unzip,Matlab,Zip,Unzip,我有很多Zip文件{'File1.Zip','File2.Zip','File3.Zip',…,'FileN.Zip'},其中每个Zip文件都包含一个Data.csv文件。我想读取每个Zip文件的'data.csv'中的数据,而不必提取Zip文件的内容。这可能吗?当然Winzip/7zip/Winrar没有COM接口组件,可以直接调用,不像word、excel或其他应用程序 因此@Java是合适的 思想不是物理上提取文件,而是创建文件的绝对路径,使得Windows视为物理存在的文件(类似于~tM

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

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

因此@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考虑为目录< /p>

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

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

您可以使用
解压
命令提取文件,读取它,如果您不需要,可以稍后删除它。我的想法是不要提取或删除…而是使用actxserver应用程序或matlab中的java组件直接读取内容…这是一个想法。您应该编辑问题以包含此可能的方法。它可能与java版本有关,但我必须使用
while entries.hasMoreElements
而不是
while entries.hasNext
才能使其正常工作。否则这是个好把戏。不要忘记在使用后关闭java zipfile(
zipfile.close
),否则它将被锁定,直到您关闭Matlab。