我正在尝试从包含60000 + .xml文件的.zip中提取.xml文件,而不必实际提取存档。每个.xml文件都具有以下命名格式HMDB#.xml
,其中5位数字代替#
。
每个.xml文件大小约为25kb + -5kb
我目前正在使用以下代码执行此操作。 path
是包含.zip文件目录的字符串,hmdbid
是包含5位数字的字符串:
%// Opens the zip file and creates temporary directories for the files so data
%// can be extracted.
function data=partzip(path,hmdbid)
zipFilename = path;
zipJavaFile = java.io.File(zipFilename);
zipFile=org.apache.tools.zip.ZipFile(zipJavaFile);
entries=zipFile.getEntries;
cnt=1;
while entries.hasMoreElements
tempObj=entries.nextElement;
file{cnt,1}=tempObj.getName.toCharArray';
cnt=cnt+1;
end
ind=regexp(file,sprintf('$*%s.xml$',hmdbid));
ind=find(~cellfun(@isempty,ind));
file=file(ind);
file = cellfun(@(x) fullfile('.',x),file,'UniformOutput',false);
data=extract_data(file{1});
zipFile.close;
end
使用包含以下内容的.zip文件测试代码时
当hmdbid
为00002
,00005
或00008
超出此范围时,代码正常工作我的数据提取函数返回file not found
错误。
我尝试了几种具有不同文件名的文件组合,结果相同。无论文件名是什么,前3个文件都可以正常工作,但其他文件没有。
我已经尝试创建一个包含100个测试.xml文件的.zip文件,其中只包含它的文件名并从这些工作中提取,这让我相信这是一个内存问题,但我不知道如何修复它。