Java IO一般大家常说的IO分为两个部分: 1.java.io包中堵塞型IO(BIO);2.java.nio包中的非堵塞型IO,通常称为New IO(NIO)。当然还有一个AIO,即异步IO。本篇说的是BIO。
在整个Java.io包中最重要的就是5个类和一个接口。5个类指的是File、OutputStream、InputStream、Writer、Reader;一个接口指的是Serializable.掌握了这些IO的核心操作那么对于Java中的IO体系也就有了一个初步的认识了
Java I/O主要包括如下几个层次,包含三个部分:
1.流式部分――IO的主体部分;
2.非流式部分――主要包含一些辅助流式部分的类,如:File类、RandomAccessFile类等;
3.其他类--文件读取部分的与安全相关的类,如:SerializablePermission类,以及与本地操作系统相关的文件系统的类,如:FileSystem类和Win32FileSystem类和WinNTFileSystem类。
主要的类如下:
1. File(文件特征与管理):用于文件或者目录的描述信息,例如生成新目录,修改文件名,删除文件,判断文件所在路径等。
2. InputStream(二进制格式操作):抽象类,基于字节的输入操作,是所有输入流的父类。定义了所有输入流都具有的共同特征。
3. OutputStream(二进制格式操作):抽象类。基于字节的输出操作。是所有输出流的父类。定义了所有输出流都具有的共同特征。
InputStream和OutputStream类图如下:
inputStream和outputStream当然还有一些很有用的类,如:ZipInputStream,ZipOutputStream,这些都是常用的ZIP压缩格式读写文件;
public class TestZipInputStream{
public static void main ( String [ ] args ) throws ZipException ,IOException{
File file = new File ( "/home/piziyu/ziptest/test.zip" ) ;
ZipFile zipFile = new ZipFile ( file ) ;
// 创建 ZipInputStream 实例
ZipInputStream zis = new ZipInputStream ( new FileInputStream ( file ) ) ;
ZipEntry entry = null ;
while ( ( entry = zis.getNextEntry ( ) ) != null ) {
System.out.println ( "decompress file :" + entry.getName ( ) ) ;
File outFile = new File ( "/home/liangruihua/ziptest/" + entry.getName ( ) ) ;
// 创建目录
if ( ! outFile.getParentFile ( ).exists ( ) ) {
outFile.getParentFile ( ).mkdir ( ) ;
}
// 如果没有就创建一个
if ( ! outFile.exists ( ) ) {
outFile.createNewFile ( ) ;
}
BufferedInputStream bis = new BufferedInputStream (zipFile.getInputStream ( entry ) ) ;
// 创建 outputstream
BufferedOutputStream bos = new BufferedOutputStream (new FileOutputStream ( outFile ) ) ;
byte [ ] b = new byte [ 100 ] ;
while ( true )
{
int len = bis.read ( b ) ;
if ( len == - 1 )
break ;
bos.write ( b , 0 , len ) ;
}
bis.close ( ) ;//更应该在finally中关闭
bos.close ( ) ;
}
zis.close ( ) ;
}
}
网友评论