Как разархивировать папку в архиве Java
Есть код который распаковывает ВСЕ папки начиная с коренвой(в архиве), а мне нужно делать на 1 директорию ниже, если использовать такой код, то он создаёт файл папки, которой не существует. В данном примере есть входной архив update.zip, в нём лежит единственная папка в корневом каталоге,которая всё и усложняет.На сколько я понял то данный код просто перебирает все файлы в архиве и записывает их в таком же порядке.
File mods = new File("C:\\Users\\User\\AppData\\Roaming\\.minecraft\\");
String[] files = mods.list((folder, name) -> name.endsWith(".jar"));
try(ZipInputStream zin = new ZipInputStream(new FileInputStream("C:\\Users\\User\\AppData\\Roaming\\.minecraft\\обнова\\update.zip")))
{
ZipEntry entry;
String name;
long size;
while((entry=zin.getNextEntry())!=null){
name = entry.getName(); // получим название файла
size=entry.getSize(); // получим его размер в байтах
System.out.printf("File name: %s \t File size: %d \n", name, size);
// распаковка
boolean exist = false;
for ( String fileName : files ) {
if(name.equals(fileName)){
exist = true;
}
}
if(!exist){
System.out.println(name);
FileOutputStream fout = new FileOutputStream("C:\\Users\\User\\AppData\\Roaming\\.minecraft\\" + name);
for (int c = zin.read(); c != -1; c = zin.read()) {
fout.write(c); //ЗАПИСЬ ФАЙЛА ИЗ АРХИВА
}
fout.flush();
zin.closeEntry();
fout.close();
System.out.println("запись");
exist = false;
}
}
}
Ответы (1 шт):
Автор решения: Сергей Бувака
→ Ссылка
Вы можете попробовать, что то такое:
String source = "folder/source.zip";
String destination = "folder/source/";
try {
ZipFile zipFile = new ZipFile(source);
zipFile.extractAll(destination);
} catch (ZipException e) {
e.printStackTrace();
}
Если файлы которые вы хотите разархивировать имеет пароль, можете попробовать такой способо:
String source = "folder/source.zip";
String destination = "folder/source/";
String password = "password";
try {
ZipFile zipFile = new ZipFile(source);
if (zipFile.isEncrypted()) {
zipFile.setPassword(password);
}
zipFile.extractAll(destination);
} catch (ZipException e) {
e.printStackTrace();
}
Надеюсь это вам поможет