1、压缩单个文件
思路:
1.需要压缩的文件A
2.压缩后压缩包B存放位置及名字
3.用FileInputStream 接A
4.用ZipOutputStream 接B
5.ZipOutputStream.putNextEntry(new ZipEntry(“newzipone.txt”)) 对准一个压缩包中要产生的(压缩体 ZipEntry)
6.while ((temp = input.read()) != -1){ zipOut.write(temp); }// 开始将文件压缩进对应的(压缩体 上面已经定好)
代码:
public class IOTest1 {
public static void main(String[] args) throws IOException {
// 压缩单个文件
String path = "C:\\Users\\康康\\Desktop\\test.txt";
String zippath = "C:\\Users\\康康\\Desktop\\"; // 压缩文件保存路径
File file = new File(path);
File zipFile = new File(zippath + "one.zip"); // 给压缩包起名
InputStream input = new FileInputStream(file);
ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(zipFile));
zipOut.putNextEntry(new ZipEntry("newzipone.txt")); // 给压缩内容文件起名
zipOut.setComment("i am lyk"); // 给压缩包增加注释
int temp = 0;
while ((temp = input.read()) != -1){
zipOut.write(temp);
}
input.close();
zipOut.close();
}
}
2、压缩多个文件
代码:
public class IOTset_1 {
public static void main(String[] args) throws Exception {
// 压缩多个文件
// 建立ZipOutputStream
ZipOutputStream zos = new ZipOutputStream(new FileOutputStream("my.zip",true));
zos.putNextEntry(new ZipEntry("a.txt"));
zos.write(new FileInputStream("a.txt").readAllBytes());
zos.putNextEntry(new ZipEntry("b.txt"));
zos.write(new FileInputStream("b.txt").readAllBytes());
zos.putNextEntry(new ZipEntry("d.txt"));
zos.write(new FileInputStream("d.txt").readAllBytes());
zos.putNextEntry(new ZipEntry("src.md"));
zos.write(new FileInputStream("src.md").readAllBytes());
zos.close();
}
}
3、解压缩(压缩包只有一个文件)
代码:
public class IOTest2 {
public static void main(String[] args) throws Exception {
// 解压缩单个文件
File file = new File("my.zip");
File outFile = new File("g:/" + "newone.txt"); // 解压缩后,文件存放位置
ZipFile zipFile = new ZipFile(file); // 已压缩的文件
ZipEntry entry = zipFile.getEntry("b.txt"); // 根据名字得到压缩包中的一个文件,并将其解压缩
InputStream input = zipFile.getInputStream(entry);
OutputStream output = new FileOutputStream(outFile);
int temp = 0;
while ((temp = input.read()) != -1){
output.write(temp);
}
input.close();
output.close();
}
}
4、解压缩(压缩包含多个文件)
思路:
1.用ZipFile类得到压缩包A
2.用ZipInputStream得到压缩包的解压缩流
3.通过while ((entry = zipInput.getNextEntry())) 得到压缩包中各个压缩体
4.用ZipFile.getInputStream(entry) 得到各个压缩体的输入流,用于读取数据
5.定义解压缩后各压缩体的存放
6.output = new FileOutputStream(outFile); int temp = 0; while((temp = input.read()) != -1) { output.write(temp); }
代码:
public class IOTest_2 {
public static void main(String[] args) throws Exception {
File file = new File("my.zip");
File outFile = null;
ZipFile zipFile = new ZipFile(file); // 压缩包文件
ZipInputStream zipInput = new ZipInputStream(new FileInputStream(file));
ZipEntry entry = null;
InputStream input = null;
OutputStream output = null;
while ((entry = zipInput.getNextEntry()) != null){
System.out.println("解压缩" + entry.getName() + "文件");
outFile = new File("f:/" + entry.getName());
if (!outFile.getParentFile().exists()){
outFile.getParentFile().mkdir();
}
if (!outFile.exists()){
outFile.createNewFile();
}
input = zipFile.getInputStream(entry);
output = new FileOutputStream(outFile);
int temp = 0;
while ((temp = input.read()) != -1){
output.write(temp);
}
input.close();
output.close();
}
}
}