我使用下面的代碼從Web的Java解壓 - 也不例外,但結果是空
File dir = new File(dest.getAbsolutePath(), archiveName);
// create output directory if it doesn't exist
if (!dir.exists()) {
dir.mkdirs();
}
System.err.println(pArchivePath);
ZipFile zipFile = null;
try {
zipFile = new ZipFile(pArchivePath);
Enumeration<?> enu = zipFile.entries();
while (enu.hasMoreElements()) {
ZipEntry zipEntry = (ZipEntry) enu.nextElement();
String name = zipEntry.getName();
long size = zipEntry.getSize();
long compressedSize = zipEntry.getCompressedSize();
System.out.printf("name: %-20s | size: %6d | compressed size: %6d\n",
name, size, compressedSize);
File file = new File(name);
if (name.endsWith("/")) {
System.err.println("make dir " + name);
file.mkdirs();
continue;
}
File parent = file.getParentFile();
if (parent != null) {
parent.mkdirs();
}
InputStream is = zipFile.getInputStream(zipEntry);
FileOutputStream fos = new FileOutputStream(file);
byte[] bytes = new byte[1024];
int length;
while ((length = is.read(bytes)) >= 0) {
fos.write(bytes, 0, length);
}
is.close();
fos.close();
}
zipFile.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (zipFile != null) {
try {
zipFile.close();
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
解壓縮檔案。它的包裝與7zip的winrar或者作爲一個.zip文件,但改名爲.qtz(但我不事這會導致問題。) 所以,如果我運行代碼來解壓縮我的檔案一切正常:我上得到的輸出sysout/err列出所有文件,也不會發生異常,但是如果我查看目標目錄...它是空的 - 只存在根文件夾。
我也用
Runtime.getRuntime().exec(String.format("unzip %s -d %s", pArchivePath, dest.getPath()));
但我不能再使用這種「產生新的進程開始,我繼續在Java代碼中解壓縮後要立即上的歸檔工作。
那麼問題是...爲什麼沒有這個和平的代碼工作的?有很多類似的例子,但沒有一個爲我工作。
BR,菲利普
編輯:下面的解決我的問題
File file = new File(dir.getParent(), name);
所以我沒有針對該文件設置正確的父路徑。
是的,這是一個很好的提示。問題是'父'採取'文件'的父路徑。所以我剛剛用新的File(dir.getParent(),name)初始化'file';現在它適用於我。 – PJWork 2014-09-11 14:14:35
很酷。你能否將問題標記爲已回答? – prabugp 2014-09-11 14:18:41