ZIP
如果要從ZIP壓縮管理文件內讀取某個文件,要先找到對應文件的 目錄進入點(知道ZIP文件內的位置),才能讀取這個文件的內容。
壓縮文件
利用ZipOutputStream類對象可以將文件壓縮爲 .zip文件
構造方法
ZipOutputStream(OutputStream out);
常用方法
putNextEntry(ZipEntry e) 開始寫一個新的ZipEntry,並將流內的位置移至此entry所指數據的開頭
write(bytr[] b,int offset,int len) 將字節數組寫入當前ZIP條數據
finish() 完成寫入ZIP輸出流的內容,無須關閉它所配合的OutputStream
setComment(String comment) 可設置此ZIP文件的註釋文字
解壓ZIP文件
ZipInputStream類可讀取Zip壓縮格式的文件
構造方法
ZipInputStream(InputStream in);
常用方法
read(byte[] b,int offset,int len) 讀取目標b數組內offset偏移量的位置,長度是len字節
available() 判斷是否已讀完目前entry所指定的數據。已讀完返回0,否則返回1
closeEntry() 關閉當前zip條目並定位流以讀取下一個條目
skip(long n) 跳過當前zip條目中指定的字節數
getNextEntry() 讀取下一個ZipEntry,並將流內的位置移至該entry所指數據的開頭
createZipEntry(String name) 以指定的name參數新建一個ZipEntry對象
舉(壞)栗子
import java.io.File;//這一大堆的都很重要,書上都省略了
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
public class Decompressing {
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream("軟件學院.zip"));
ZipEntry entry = zipInputStream.getNextEntry();
while (((entry = zipInputStream.getNextEntry()) != null) && !entry.isDirectory()) {
File file = new File("C:\\Users\\Zhang"+entry.getName());
System.out.println(file);
if (!file.exists()) {
file.mkdirs();
file.createNewFile();
}
zipInputStream.closeEntry();
System.out.println(entry.getName() + "解壓成功!");
}
zipInputStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
失敗告終