У меня есть код для распаковки содержимого zip-файла (если необходимо создать каталог, он также создается).
Однако я хочу проверить следующее: (1) при распаковке файлов из zip проверьте, существует ли уже файл, и в зависимости от значения, указанного пользователем во время выполнения, либо перезапишите этот файл, либо оставьте исходный файл.
В частности, какой должна быть строка кода ниже указанной строки, которая проверяет, присутствует ли уже файл с определенным именем в этом месте или нет?
Строка кода, перед которой должна производиться эта проверка (на существование файла), приведена ниже отдельно...
copyInputStream(zipFile.getInputStream(entry),
new BufferedOutputStream(new FileOutputStream(entry.getName())));
(2) Как проверить, существует ли каталог с указанным именем или нет. Эта проверка требуется непосредственно перед следующим кодом:
(new File(entry.getName())).mkdir();
Весь код программы приведен ниже:
import java.io.*;
import java.util.*;
import java.util.zip.*;
public class Unzip {
public static final void copyInputStream(InputStream in, OutputStream out)
throws IOException
{
byte[] buffer = new byte[1024];
int len;
while((len = in.read(buffer)) >= 0)
out.write(buffer, 0, len);
in.close();
out.close();
}
public static final void main(String[] args) {
Enumeration entries;
ZipFile zipFile;
if(args.length != 1) {
System.err.println("Usage: Unzip zipfile");
return;
}
try {
zipFile = new ZipFile(args[0]);
entries = zipFile.entries();
while(entries.hasMoreElements()) {
ZipEntry entry = (ZipEntry)entries.nextElement();
if(entry.isDirectory()) {
// Assume directories are stored parents first then children.
System.err.println("Extracting directory: " + entry.getName());
// This is not robust, just for demonstration purposes.
(new File(entry.getName())).mkdir();
continue;
}
System.err.println("Extracting file: " + entry.getName());
copyInputStream(zipFile.getInputStream(entry),
new BufferedOutputStream(new FileOutputStream(entry.getName())));
}
zipFile.close();
} catch (IOException ioe) {
System.err.println("Unhandled exception:");
ioe.printStackTrace();
return;
}
}
}