我有代码解压缩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;
}
}
}
答案 0 :(得分:3)
您可能希望在java.io.File API doc中搜索“存在”一词。
答案 1 :(得分:1)
您需要使用java.io.File
检查文件夹或目录是否存在,如下所示:
// first obtain the base path where you are running your code
URL url = getClass().getClassLoader().getResource(".");
// then check for the existence of the file you need
File f = new File(url.getPath() + entry.getName());
// check for the flag to overwrite the file or it doesn't exist
if(!file.exists() || overwrite) {
copyInputStream(zipFile.getInputStream(entry),
new BufferedOutputStream(new FileOutputStream(entry.getName())));
}
检查文件夹是否存在可以使用相同的方法。
答案 2 :(得分:0)
File课程有exists,isFile和isDirectory方法可用于您的目的。
只需使用:
boolean ovrParam = // read flag from args array
// and inside the loop
File file = new File(entry.getName());
if(ovrParam || !file.exists()) {
copyInputStream(zipFile.getInputStream(entry),
new BufferedOutputStream(new FileOutputStream(entry.getName())));
}
当然,组合目录和文件可能会让我更加棘手(例如,您可以在文件系统中提取一个文件夹提取位置,并且zip包含一个文件,其文件夹的名称与您要解压缩的文件夹完全相同,或者可能是逆)。但无论如何,这应该给你一个指导。
干杯,