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

时间:2016-05-26 09:08:22

标签: java matlab zip unzip

我在TX压缩的txt文件中有制表符分隔的ascii数据(并且zip可能包含也可能不包含其他文件)。我想在不解压缩zip文件的情况下将这些数据读入矩阵。

之前有一些类似的@matlab / @java帖子:

Read the data of CSV file inside Zip File without extracting the contents in Matlab

Extracting specific file from zip in matlab

Read Content from Files which are inside Zip file

由于上述原因,我已经做到了这一点 - 我可以识别zip中的.txt,但不知道如何读取其内容。第一个例子:

zipFilename = 'example.zip';
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,'$*.xml$');
ind=find(~cellfun(@isempty,ind));
file=file(ind);
file = cellfun(@(x) fullfile('.',x),file,'UniformOutput',false);
% Now Operate Any thing on File.
zipFile.close

然而,我没有找到关于如何" operate anything on file"的例子。我可以在zip文件中提取路径,但不知道如何读取此txt文件的内容。 (我希望直接将其内容读入内存 - 一个矩阵 - 如果可能的话,不提取。)

另一个例子是

zipFilename = 'example.zip';
zipFile = org.apache.tools.zip.ZipFile(zipFilename);
entries = zipFile.getEntries;
while entries.hasMoreElements
    entry = entries.nextElement;
    entryName = char(entry.getName);
    [~,~,ext] = fileparts(entryName);
    if strcmp(ext,'.txt')
        inputStream  = zipFile.getInputStream(entry);
        %Read the contents of the file
        inputStream.close;
    end
end
zipFile.close

原始示例包含提取文件的代码,但我只想将其直接读入内存。同样,我不知道如何使用此inputStream

有人能给我一个关于MWE的建议吗?

1 个答案:

答案 0 :(得分:0)

可能有点晚了,但是也许有人可以使用它: (该代码已在Matlab R2018a中进行了测试)

zipFilename = 'example.zip';
zipFile = org.apache.tools.zip.ZipFile(zipFilename);
entries = zipFile.getEntries;
while entries.hasMoreElements
    entry = entries.nextElement;
    entryName = char(entry.getName);
    [~,~,ext] = fileparts(entryName);
    if strcmp(ext,'.txt')
        inputStream  = zipFile.getInputStream(entry);
        %Read the contents of the file

        buffer = java.io.ByteArrayOutputStream();
        org.apache.commons.io.IOUtils.copy(inputStream, buffer);
        data = char(typecast(buffer.toByteArray(), 'uint8')');

        inputStream.close;
    end
end
zipFile.close