我正在尝试从包含 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 文件测试代码时:
- HMDB00002.xml
- HMDB00005.xml
- HMDB00008.xml
- HMDB00010.xml
- HMDB00012.xml
代码在hmdbid
is时工作正常00002
,00005
或者00008
当它超过这个时,我的数据提取函数返回file not found
错误。
我尝试了几种具有不同文件名的文件组合,结果相同。前 3 个文件可以正常工作,但其他文件不能正常工作,无论文件名如何。
我尝试创建一个包含 100 个仅包含文件名的测试 .xml 文件的 .zip,并从这些工作中提取正常,这让我相信这是一个内存问题,但我不确定如何解决它。