У меня есть способ архивировать файлы в Java:
public void compress(File[] inputFiles, OutputStream outputStream) {
Validate.notNull(inputFiles, "Input files are required");
Validate.notNull(outputStream, "Output stream is required");
int BUFFER = 2048;
BufferedInputStream origin = null;
ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(outputStream));
byte data[] = new byte[BUFFER];
for (File f : inputFiles) {
FileInputStream fi;
try {
fi = new FileInputStream(f);
} catch (FileNotFoundException e) {
throw new RuntimeException("Input file not found", e);
}
origin = new BufferedInputStream(fi, BUFFER);
ZipEntry entry = new ZipEntry(f.getName());
try {
out.putNextEntry(entry);
} catch (IOException e) {
throw new RuntimeException(e);
}
int count;
try {
while ((count = origin.read(data, 0, BUFFER)) != -1) {
out.write(data, 0, count);
}
} catch (IOException e) {
throw new RuntimeException(e);
}
try {
origin.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
try {
out.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
Как видите, параметр inputFiles - это массив объектов File. Это все работает, но я бы хотел иметь вместо этого коллекцию объектов InputStream в качестве параметра, чтобы сделать его более гибким.
Но тогда у меня проблема в том, что при создании нового ZipEntry (как в коде выше)
ZipEntry entry = new ZipEntry(f.getName());
У меня нет имени файла в качестве параметра.
Как мне решить это? Может быть, карта с парами (fileName, inputStream)?
Любые мысли по этому поводу приветствуются!
Спасибо,
Nathan