1.压缩单个文件
思路:
- 需要压缩的文件A
- 压缩后压缩包B存放位置,及名字
- 用FileInputStream 接A
- 用ZipOutputStream 接B
- ZipOutputStream.putNextEntry(new ZipEntry("newzipone.txt")) 对准一个压缩包中将要产生的 (压缩体 ZipEntry)
- while ((temp = input.read()) != -1) { zipOut.write(temp); } //开始将文件压缩进对应的 (压缩体上面已经定好)
代码:
//压缩单个文件
public class IOTest {
public static void main(String[] args) throws IOException {
String path = "C:/Users/liuyan/Desktop/one.txt";
String zippath = "C:/Users/liuyan/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")); //给压缩内容文件起名(给one.txt起名)
// 设置注释
zipOut.setComment("i am ly");
int temp = 0;
while ((temp = input.read()) != -1) {
zipOut.write(temp);
}
input.close();
zipOut.close();
}
}
对应位置如图:
2.一次性压缩多个文件进压缩包
思路:
- 需要压缩的文件夹 A ,里面有三个文件
- 压缩后压缩包B存放位置,及名字
- 用ZipOutputStream 接B
- File[] files = file.listFiles(); 得到文件夹下的文件
- 通过循环进行第6,7,8步 ,将文件夹下文件一个个压缩进压缩包
- 用FileInputStream 接files[i]
- ZipOutputStream.putNextEntry(new ZipEntry("newzipone.txt")) 对准一个压缩包中将要产生的 (压缩体 ZipEntry)
- while ((temp = input.read()) != -1) { zipOut.write(temp); } //开始将文件压缩进对应的 (压缩体上面已经定好)
代码:
//一次性压缩多个文件
public class IOTest1 {
public static void main(String[] args) throws IOException {
// 要被压缩的文件夹,里面有三个文件
String path = "C:/Users/liuyan/Desktop/test";
String zippath = "C:/Users/liuyan/Desktop/"; //压缩文件保存路径
File file = new File(path);
File zipFile = new File(zippath + "newzip.zip"); //压缩包起名
InputStream input = null;
ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(zipFile));
zipOut.setComment("hello"); //压缩包设置注释
if (file.isDirectory()) {
File[] files = file.listFiles(); //没有加过滤器,得到文件夹下所有文件
for (int i = 0; i < files.length; ++i) { //通过循环将文件夹下文件一个个压缩进压缩包
input = new FileInputStream(files[i]);
//zipOut.putNextEntry(new ZipEntry(files[i].getName())); //压缩包里只有三个文件,没有test文件夹
zipOut.putNextEntry(new ZipEntry(file.getName()+"/" + files[i].getName())); //有test文件
int temp = 0;
while ((temp = input.read()) != -1) {
zipOut.write(temp);
}
input.close();
}
}
zipOut.close();
}
}
对应位置如图:
3.解压缩(压缩包只有一个文件)
代码:
//解压缩单个文件
public class IOTest2 {
public static void main(String[] args) throws IOException{
File file = new File("C:/Users/liuyan/Desktop/one.zip");
File outFile = new File("C:/Users/liuyan/Desktop/" +"newone.txt"); //解压缩后,文件存放位置
ZipFile zipFile = new ZipFile(file); //已压缩的文件
ZipEntry entry =zipFile.getEntry("one.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.解压缩(压缩包含多个文件)
思路:
- 用 ZipFile 类得到压缩包 A
- 用ZipInputStream得到 压缩包的解压缩流
- 通过 while ((entry = zipInput.getNextEntry()) 得到压缩包中各个压缩体,进行4,5,6步
- 用ZipFile.getInputStream( entry ) , 得到各个压缩体的输入流,用于读取数据
- 定义解压缩后各压缩体的存放
- output = new FileOutputStream(outFile); int temp = 0; while ((temp = input.read()) != -1) { output.write(temp); }
代码:
//解压缩多个文件(压缩包中含多个文件)
public class IOTest3 {
public static void main(String[] args) throws IOException {
File file = new File("C:/Users/liuyan/Desktop/newzip.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("C:/Users/liuyan/Desktop/" + 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();
}
}
}