一、数据输入/输出流
数据输入/输出流(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)
该类的常用方法如下:
方法 | 返回值 | 说明 |
---|---|---|
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)
常用方法如下:
方法 | 返回值 | 说明 |
---|---|---|
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解压成功
*/