Java中的数据输入/输出流和ZIP压缩输入/输出流

一、数据输入/输出流

数据输入/输出流(DataInputStream类与DataOutputStream类)允许应用程序以与机器无关的方式从底层输入流中读取基本Java数据类型。

常用的构造方法如下:

(1)DataInputStream(InputStream in):使用指定的基础InputStream创建一个DataInputStream

(2)DataOutputStream(OutputStream out):创建一个新的数据输出流,将数据写入指定基础输出流

DataOutputStream类提供了如下几种写入字符串的方法:

(1)writeBytes(String s)

(2)writeChars(String s)

(3)writeUTF(String s)

DataInputStream类只提供了一个readUTF()方法返回字符串

通过如下示例来进行说明:

public class Example_01 {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		try {
			FileOutputStream fs = new FileOutputStream("word.txt");
			DataOutputStream ds = new DataOutputStream(fs);
			ds.writeUTF("使用writeUTF()方法写入数据");
			ds.writeChars("使用writeChars()方法写入数据");
			ds.writeBytes("使用writeBytes()方法写入数据");
			ds.close();
			FileInputStream fis = new FileInputStream("word.txt");
			DataInputStream dis = new DataInputStream(fis);
			System.out.println(dis.readUTF());
		}catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}

}
/*输出结果如下:
使用writeUTF()方法写入数据
*/

word.txt的内容如下:

 

二、ZIP压缩输入/输出流

在Java中通过使用java.util.zip包中的ZipOutputStream与ZipInputStream类来室性文件的压缩/解压缩操作。ZipEntry类产生的对象,是用来代表一个ZIP压缩文件内的进入点;ZipInputStream类用来读取ZIP压缩格式的文件,所支持的包括已压缩及未压缩的进入点;ZipOutputStream类用来写出ZIP压缩格式的文件,而且所支持的包括已压缩及未压缩的进入点。

1、压缩文件

利用ZipOutputStream类对象,可将文件压缩为.zip文件,构造方法如下:

ZipOutputStream(OutputStream out)

该类的常用方法如下:

ZipOutputStream类的常用方法
方法 返回值 说明
putNextEntry(ZipEntry e) void 开始写一个新的ZipEntry,并将流内的位置移至entry所指数据的开头
write(byte[] b,int off,int len) void 将字节数组写入当前ZIP条目数据
finish() void 完成写入ZIP输出流的内容,无需关闭它所配合的OutputStream
setComment(String comment) void 可设置此ZIP文件的注释文件

通过以下示例来进行说明:

public class MyZip {
	private void zip(String zipFileName,File InputFile) throws Exception{
		ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFileName));
		zip(out,InputFile,"");
		System.out.println("压缩中....");
		out.close();
	}
	private void zip(ZipOutputStream out,File f,String base) throws Exception{
		if(f.isDirectory()) {
			File[] fl = f.listFiles();
			out.putNextEntry(new ZipEntry(base+"/"));
			base = base.length() == 0?"":base+"/";
			for(int i=0;i<fl.length;i++) {
				zip(out,fl[i],base+fl[i]);
			}
		}else {
			out.putNextEntry(new ZipEntry(base));
			FileInputStream in = new FileInputStream(f);
			int b;
			System.out.println(base);
			while((b =in.read())!=-1) {
				out.write(b);
			}
			in.close();
		}
	}
	public static void main(String agrs[]) {
		
		MyZip book = new MyZip();
		try {
			book.zip("F:/image.zip", new File("F:/images"));
			System.out.println("压缩完成");
		}catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}
}
/*输出结果如下:
F:\images\Akali.jpg
F:\images\bg.png
F:\images\captain-america.jpg
F:\images\Fizz.jpg
F:\images\Irelia.jpg
F:\images\LeBlanc.jpg
F:\images\Lux.jpg
F:\images\search.png
F:\images\send.png
F:\images\timg.jpg
压缩中....
压缩完成
*/

并且在F盘中能够找到

 

2、解压ZIP文件

ZipInputStream类可以读取ZIP压缩格式的文件,包括已压缩和未压缩的条目,常用构造方法如下:

(1)ZipInputStream(InputStream in)

常用方法如下:

ZipInputStream类的常用方法
方法 返回值 说明
read(byte b,inf off,int len) int 读取目标b数组内off偏移量的位置,长度为len字节
available() int 判断是否已读完目前entry所指定的数据,已读完返回0,否则返回1
closeEntry() void  关闭当前ZIP条目并定位流以读取下一个条目
skip(long n) long 跳过当前ZIP条目中指定的字数
getNextEntry() ZipEntry 读取下一个ZipEntry,并将流内的位置移至该entry所指数据的开头
createZipEntry(String name) ZipEntry 以指定的name参数新建一个ZipEntry对象

通过以下示例来说明:

public class Decompressing {
	public static void main(String args[]) {
		ZipInputStream zin;
		try {
			zin = new ZipInputStream(new FileInputStream("F:/image.zip"));
			ZipEntry entry = zin.getNextEntry();
			while(((entry=zin.getNextEntry())!=null)&&!entry.isDirectory()) {
				File file = new File(entry.getName());
				System.out.println(file);
				if(!file.exists()) {
					file.mkdir();
					file.createNewFile();
				}
				zin.closeEntry();
				System.out.println(entry.getName()+"解压成功");
			}
			zin.close();
		}catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}
}
/*输出结果如下:
F:\images\Akali.jpg
F:\images\Akali.jpg解压成功
F:\images\bg.png
F:\images\bg.png解压成功
F:\images\captain-america.jpg
F:\images\captain-america.jpg解压成功
F:\images\Fizz.jpg
F:\images\Fizz.jpg解压成功
F:\images\Irelia.jpg
F:\images\Irelia.jpg解压成功
F:\images\LeBlanc.jpg
F:\images\LeBlanc.jpg解压成功
F:\images\Lux.jpg
F:\images\Lux.jpg解压成功
F:\images\search.png
F:\images\search.png解压成功
F:\images\send.png
F:\images\send.png解压成功
F:\images\timg.jpg
F:\images\timg.jpg解压成功
*/
发布了61 篇原创文章 · 获赞 1 · 访问量 1322

猜你喜欢

转载自blog.csdn.net/qq_29440983/article/details/103885229