0

我正在尝试从包含 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

代码在hmdbidis时工作正常0000200005或者00008当它超过这个时,我的数据提取函数返回file not found错误。

我尝试了几种具有不同文件名的文件组合,结果相同。前 3 个文件可以正常工作,但其他文件不能正常工作,无论文件名如何。

我尝试创建一个包含 100 个仅包含文件名的测试 .xml 文件的 .zip,并从这些工作中提取正常,这让我相信这是一个内存问题,但我不确定如何解决它。

4

0 回答 0