我在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的建议吗?
答案 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