美文网首页
Java I/O 1.1

Java I/O 1.1

作者: 白首倾盖 | 来源:发表于2018-04-12 18:02 被阅读0次

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

    }

}

相关文章

网友评论

      本文标题:Java I/O 1.1

      本文链接:https://www.haomeiwen.com/subject/mfaohftx.html