压缩流、解压缩流、了解一下

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 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();

	}
}

对应位置如图:

压缩流、解压缩流、了解一下_第1张图片

 

2.一次性压缩多个文件进压缩包

思路:

  1. 需要压缩的文件夹 A ,里面有三个文件
  2. 压缩后压缩包B存放位置,及名字
  3. 用ZipOutputStream 接B
  4. File[] files = file.listFiles(); 得到文件夹下的文件
  5. 通过循环进行第6,7,8步 ,将文件夹下文件一个个压缩进压缩包
  6. 用FileInputStream 接files[i]
  7. ZipOutputStream.putNextEntry(new ZipEntry("newzipone.txt")) 对准一个压缩包中将要产生的 (压缩体 ZipEntry)
  8. 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();
	}

}

对应位置如图:

压缩流、解压缩流、了解一下_第2张图片

 

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();
	    }

}

位置如图:

压缩流、解压缩流、了解一下_第3张图片

 

4.解压缩(压缩包含多个文件)

思路:

  1. 用 ZipFile 类得到压缩包 A
  2. 用ZipInputStream得到 压缩包的解压缩流
  3. 通过 while ((entry = zipInput.getNextEntry()) 得到压缩包中各个压缩体,进行4,5,6步
  4. 用ZipFile.getInputStream( entry ) , 得到各个压缩体的输入流,用于读取数据
  5. 定义解压缩后各压缩体的存放
  6. 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();
		}
	}
}

 

 

 

你可能感兴趣的:(java基础)