Утилита распаковать весь архив в каталог в java
Я хотел бы сделать что-то подобное в моей программе:
File zipFile = .....;
File destDir = ....;
ImaginaryZipUtility.unzipAllTo(zipFile, destdir);
Я не могу первыми сделать это из программы. Где найти полезный метод, например, выше? Я попытался посмотреть на apache commons-io, но ничего там. Итак, где я должен выглядеть?
Ответы
Ответ 1
Кажется, что можно сделать то, что я хочу, используя библиотеку TrueZip:
https://truezip.dev.java.net/manual-6.html#Copying
Это не идеальная ситуация, так как библиотека довольно большая и с большим объемом, чем мне нужно (а также с некоторыми своеобразными и запутанными деталями, такими как организация вокруг подклассов java.io.File, которые также называются файлом для использования в классах, которые обычно также обрабатывают экземпляры java.io.File!).
По крайней мере, мне не обязательно находиться в ситуации, когда большинство строк кода в классе не связаны с ответственностью класса или поддерживают сложный класс утилиты в проекте, который не имеет отношения к цели модуля.
Я думаю, что это типичный пример по основной причине, по которой опытные разработчики переходят с Java на Ruby. Несмотря на обилие библиотек в java, слишком многие из них плохо разработаны, поэтому простые операции становятся столь же трудными, как и более специализированные. Похоже, что они написаны снизу вверх технологическими специалистами, которые больше стремятся разоблачить все детали и возможности, а не просто делать повседневные задачи. Люди apache заслуживают похвалы за создание библиотек, которые освобождают ваш класс от строк кода, особенно циклов и условных выражений, которые не связаны с бизнес-целями класса.
Ответ 2
очень старый код, который я смог выкопать
package com.den.frontend;
import java.util.;
import java.util.zip;
import java.io. *;
public class ZIPUtility
{
public static final int BUFFER_SIZE = 2048;
//This function converts the zip file into uncompressed files which are placed in the
//destination directory
//destination directory should be created first
public static boolean unzipFiles(String srcDirectory, String srcFile, String destDirectory)
{
try
{
//first make sure that all the arguments are valid and not null
if(srcDirectory == null)
{
System.out.println(1);
return false;
}
if(srcFile == null)
{
System.out.println(2);
return false;
}
if(destDirectory == null)
{
System.out.println(3);
return false;
}
if(srcDirectory.equals(""))
{
System.out.println(4);
return false;
}
if(srcFile.equals(""))
{
System.out.println(5);
return false;
}
if(destDirectory.equals(""))
{
System.out.println(6);
return false;
}
//now make sure that these directories exist
File sourceDirectory = new File(srcDirectory);
File sourceFile = new File(srcDirectory + File.separator + srcFile);
File destinationDirectory = new File(destDirectory);
if(!sourceDirectory.exists())
{
System.out.println(7);
return false;
}
if(!sourceFile.exists())
{
System.out.println(sourceFile);
return false;
}
if(!destinationDirectory.exists())
{
System.out.println(9);
return false;
}
//now start with unzip process
BufferedOutputStream dest = null;
FileInputStream fis = new FileInputStream(sourceFile);
ZipInputStream zis = new ZipInputStream(new BufferedInputStream(fis));
ZipEntry entry = null;
while((entry = zis.getNextEntry()) != null)
{
String outputFilename = destDirectory + File.separator + entry.getName();
System.out.println("Extracting file: " + entry.getName());
createDirIfNeeded(destDirectory, entry);
int count;
byte data[] = new byte[BUFFER_SIZE];
//write the file to the disk
FileOutputStream fos = new FileOutputStream(outputFilename);
dest = new BufferedOutputStream(fos, BUFFER_SIZE);
while((count = zis.read(data, 0, BUFFER_SIZE)) != -1)
{
dest.write(data, 0, count);
}
//close the output streams
dest.flush();
dest.close();
}
//we are done with all the files
//close the zip file
zis.close();
}
catch(Exception e)
{
e.printStackTrace();
return false;
}
return true;
}
private static void createDirIfNeeded(String destDirectory, ZipEntry entry)
{
String name = entry.getName();
if(name.contains("/"))
{
System.out.println("directory will need to be created");
int index = name.lastIndexOf("/");
String dirSequence = name.substring(0, index);
File newDirs = new File(destDirectory + File.separator + dirSequence);
//create the directory
newDirs.mkdirs();
}
}
}
Ответ 3
Я знаю, что я очень опаздываю на шоу, но я искал то же самое и нашел это через google. Самый простой способ найти задачу ant "распаковать". Вы можете использовать его без какой-либо сложной установки ant (для создания полного проекта ant есть материал, такой как ProjectHelper) из вашего источника java, включая
<dependency>
<groupId>org.apache.ant</groupId>
<artifactId>ant-compress</artifactId>
<version>1.2</version>
</dependency>
Код для распаковки файла в каталог выглядит следующим образом:
org.apache.ant.compress.taskdefs.Unzip u = new Unzip();
u.setSrc(new File("<archive.zip>"));
u.setDest(new File("<targetDir>"));
u.execute();
Ответ 4
Ну, java.util.zip имеет классы, чтобы делать то, что вы хотите очень осторожно.