Java知识点整理:第十二章:java文件系统管理、IO流(Input(输入)/Output(输出)) 、缓冲流

来源:互联网 发布:裁决网络 编辑:程序博客网 时间:2024/05/21 08:44

1.Java文件系统管理:

 1.File

       java.io.File类用于表示文件、目录.

      也就是说编程人员可以通过File类在程序中操作硬盘上的文件和目录(文件夹)

 

       File类只用于表示文件、目录的相关信息(文件路径.文件名称.文件大小...)不能对文件的内容进行访问.

 

        File的基本API:

 File(String) 执行文件名的构造器

 length()  文件的长度

 lastModified()  最后的修改时间.

 getName()  获取文件的名字

 getPath()  路径

 exists()   判断是否存在

 isFile()   是不是文件

 isDirectory()是不是目录

 mkdir()  创建目录

 mkdirs() 同时创建多个目录

 delete() 删除

 createNewFile()创建新文件

 listFile()  罗列所有的文件.

 

 

      2.RandomAccessFile

        RandomAccessFile类是java提供的功能丰富的文件内容访问类.它提供了从多方法来访问文件内容,既可以读取文件内容,也可以向文件写数据.

RandomAccessFile支持"随机访问"方式.可以访问文件的任意位置.

 

a.java文件模型

 在硬盘上文件是以"byte by byte"存储的。

 是数据的集合.

b.打开文件

  有两种方式: rw(读写), r(只读)

   RandomAccessFile raf = new RandomAccessFile(file,"rw");

          打开文件的时候默认文件的指针在开头:

   pointer =0

c.读取文件

  raf.read();

 每次从文件中读取一个byte(8)填充到int的低八位.24位为0.

 如果返回了-1,代表读到文件的末尾.

 每次读取后自动移动文件指针.准备下次读取

 

d.写入方法

  raf.write(int);

 可以将int的低8位写入到文件中.同时指针自动移动到下一个位置,准备再次写入.

e.文件读写完成以后一定要关闭文件.

   sun官方说明,如果不关闭,可能遇到一些 意想不到的错误.根据具体操作平台的不同会有不同的现象。

  在使用过程中,切记文件读写完成后要关闭文件.

 例如:

11111111 00000000 00000000 11111111

           java中的位移运算.

左移<<:高位舍弃,低位补0  可能会发生符号的改变.

右移:

   带符号右移:      >>

   高位补原来的符号.原来是1就补1

                   原来是0就补0

     

    不带符号右移      >>>

    高位全部补0

 

    不管是无符号右移还是带符号右移移出去的全部舍弃.


2.IO(Input(输入)/Output(输出)) :

1.IO(Input(输入)/Output(输出))

   RandomAccessFile

   raf.read() 输入

   raf.write()输出

 

   java中的IO流是实现输入\输出的基础.

   

   a.InputStream

    输入流,抽象了应用程序读取数据的方式

     OutputStream

    输出流,抽象了应用程度写出数据的方式

  

  输入流与输出流是相对于应用程序而言的应用程序是参照物.

 

   b.已知子类:

     FileInputStream(文件字节输入流)

     FileOutputStream(文件字节输出流)

    

     fis:从文件中读取字节,如果读取到文件的末尾会返回-1

     fos:往文件中写出字节数据.

        可以实现数据的追加写入.在构造fos的时候需要设置,newFOS(file,true);

 true:代表着追加写入.

    注意:输入\输出流使用完以后一定要close

    

    

 

2.DataInputStream/DataOutputStream(数据流)

  dis以及dos是对"字节流"的扩展,可以更方便的读写int,long,char等基本类型的数据.

 

  disdos是对基本字节流的封装.

 不能直接对文件进行访问.而是要依赖fis|fos.

 

3.序列化以及反序列化

 序列化:将内存中数据写到硬盘上的文件中

        数据--->nbyte

    int a = 5 ;

    fos.write(a)  //低八位

    dos.writeXXX(a) //完整的32

 

 

 反序列化:将硬盘上文件中的内容读取到内存中

            n byte--->数据

    fis.read()

    dis.readXXX()


3.缓冲流

   BufferedInputStream  缓冲输入流

   BufferedOutputStream 缓冲输出流bis以及bosIO操作提供了缓冲区.

  一般打开文件进行写入或者读取操作时,都建议加上缓冲流.可以提供IO的性能.

 

  缓冲流为读写都提供了缓冲区,数据读到缓冲区中,然后再写到缓冲区中.最后将缓冲区中的数据一次性写到硬盘上.

  

  在使用的时候需要注意:

 关闭输出流之前一定要保证缓冲区中的数据全部写出.



 




0 0
原创粉丝点击