Borrar filtros
Borrar filtros

how to unzip files using external unzip software?

10 visualizaciones (últimos 30 días)
sandy
sandy el 9 de En. de 2014
Comentada: Arjun Ajit Kottara el 6 de Mayo de 2022
i have 50000 zip files.i need to unzip all those files and want to fetch .txt files alone from each zip files...any help..

Respuesta aceptada

Friedrich
Friedrich el 9 de En. de 2014
Editada: Friedrich el 9 de En. de 2014
Hi,
I would use JAVA to get what you want, e.g. the following example extract the .txt files in a zip files only (done with R2013b):
zipFile = org.apache.tools.zip.ZipFile('Untitled1.zip');
entries = zipFile.getEntries;
while entries.hasMoreElements
entry = entries.nextElement;
entryName = char(entry.getName);
[~,~,ext] = fileparts(entryName);
if strcmp(ext,'.txt')
inputStream = zipFile.getInputStream(entry);
fileOutputStream = java.io.FileOutputStream(fullfile(pwd,entryName));
streamCopier = com.mathworks.mlwidgets.io.InterruptibleStreamCopier.getInterruptibleStreamCopier;
streamCopier.copyStream(inputStream, fileOutputStream);
fileOutputStream.close;
inputStream.close;
end
end
zipFile.close
UPDATED VERSION FOR SCANNING A FOLDER FOR ZIP FILES AND PROCESS ALL OF THEM
zipfolder = 'C:\Users\fhempel\Desktop\tmp';
extractionfolder = 'C:\Users\fhempel\Desktop\tmp';
zipfiles = dir([zipfolder,'\*.zip']);
for i=1:numel(zipfiles)
zipFile = org.apache.tools.zip.ZipFile(fullfile(zipfolder,zipfiles(i).name));
entries = zipFile.getEntries;
while entries.hasMoreElements
entry = entries.nextElement;
entryName = char(entry.getName);
[~,~,ext] = fileparts(entryName);
if strcmp(ext,'.txt')
inputStream = zipFile.getInputStream(entry);
if ~exist(fullfile(extractionfolder,zipfiles(i).name(1:end-4)),'dir')
mkdir(fullfile(extractionfolder,zipfiles(i).name(1:end-4)))
end
fileOutputStream = java.io.FileOutputStream(fullfile(extractionfolder,zipfiles(i).name(1:end-4),entryName));
streamCopier = com.mathworks.mlwidgets.io.InterruptibleStreamCopier.getInterruptibleStreamCopier;
streamCopier.copyStream(inputStream, fileOutputStream);
fileOutputStream.close;
inputStream.close;
end
end
zipFile.close
end
  8 comentarios
Friedrich
Friedrich el 9 de En. de 2014
I dont know the zipsearch functon and I dont know what it returns. But you need to adjust this line
zipFile = org.apache.tools.zip.ZipFile(fullfile(zipfolder,zipfiles(i).name));
Basically the argument needs to be the absolut path to the zip file you like to process, e.g. C:\some_folder\myzip.zip.
Since the output should be in one folder you can remove this three lines:
if ~exist(fullfile(extractionfolder,zipfiles(i).name(1:end-4)),'dir')
mkdir(fullfile(extractionfolder,zipfiles(i).name(1:end-4)))
end
Finally this one needs to be adjusted:
fileOutputStream = java.io.FileOutputStream(fullfile(extractionfolder,zipfiles(i).name(1:end-4),entryName));
I guess it should be:
fileOutputStream = java.io.FileOutputStream(fullfile(extractionfolder,entryName));
Please also update the extractionfolder variable to an existing folder on your machine. In addition please also update the zipfolder variable accordingly.
Arjun Ajit Kottara
Arjun Ajit Kottara el 6 de Mayo de 2022
Hey, I was searching for this answer!, but I need to just extract the multiple zip files to another targer folder, so what changes should I make? since this will filter out non .txt files..

Iniciar sesión para comentar.

Más respuestas (2)

Walter Roberson
Walter Roberson el 9 de En. de 2014
  1 comentario
sandy
sandy el 9 de En. de 2014
Editada: sandy el 9 de En. de 2014
thanks...this s for fetching files in a dir or a specific folder..fetching inside each zip file is difficult here.any ideas..also.matlab unzip() function is faster than external program zip.exe ?..suggestion

Iniciar sesión para comentar.


Peng Zheng
Peng Zheng el 14 de Oct. de 2014
Hello, I think this answer is very useful for me.But I don't understand this two lines:
streamCopier = com.mathworks.mlwidgets.io.InterruptibleStreamCopier.getInterruptibleStreamCopier;
streamCopier.copyStream(inputStream, fileOutputStream);
Can you please be so kind to tell me what does this mean and what it will return?

Categorías

Más información sobre File Operations en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by