Java io

1.File(文件类型)

    作用:对文件系统上的文件或目录进行查看操作等。只能创建,删除文件(目录)或者查看其属性,但是不能改变文件的内容。

    构造器:

                File(String pathname)
pathname:指定文件或目录的路径(此路径硬盘上不一定存在)

File(String pathname,String childname)

    常用方法:

                exists():判断的是指定的路径在硬盘上是否真实存在

                getName():获取文件名

                getAbsolutePath():获取绝对路径

                listFiles():返回的是此目录下的所有文件和目录

                createNewFile():创建文件

                                    创建时,不一定成功。当这个要创建的文件的父目录不存在时,创建失败。(这个方法需要抛出异常)

                isFile():判断指定的file是不是文件

                isDirectory():判断指定的file是不是目录

                mkdir():创建文件夹(只会创建一层目录)

                mkdirs():创建文件夹(会创建多层目录)

                detele():删除文件

                     当指定一个路径时,如果此路径下有文件或文件夹,会删除失败;此路径下没有东西时,会删除指定路径最里层 的目录。如果指定的路径是一个文件时,也只会删除此文件;当指定的路径是目录时,并且目录下有东西时,删除逻辑是先从最后一层开始删除,一次向上删除。

                Java io

2.在内存中指定一个路径文件

        路径:文件操作系统的路径分隔符不一样
如:window下的:\
        linux下的:/
File.separator:常量,会根据不同操作系统返回不同的分隔符。
相对路径:相对于某一个目录来说的。
.:表示所在的当前目录
..:表示返回上一层目录
绝对路径:(不建议使用)以根目录为参照物的,也就是需要从跟目录写起。
window: c:\a\a.txt

linux:   /home/a.txt

3.RandomAccessFile(随机读写文件类型)

    作用:对文件可以进行读取和写入操作。

    构造器:

                RandomAccessFile(File file,String mode):
file:要指定一个文件的路径。
mode:"r"(可读),"rw"(可读可写)
RandomAccessFile(String pathname,String mode):

pathname:必须指定一个文件的路径。

    常用方法:

                read():只能读取一个字节,读取的字节放入int类型的数据的低八位上

write(int a):只能写出a的二进制的低八位

                read(Byte[] arr):作用是将读取到的arr.length个字节存入数组arr中。返回值为实际读取的有效字节个数。

        write(Byte[] arr):作用是将字节数组里的字节写入文件中。

        write(byte[] arr,int startIndex,int length):作用是将字节数组里的字节从下标startIndex开始,写length个字节。

        getFilePointer():获取文件指针的下标。

        seek(int index):将指针移动到某一下标

    按位运算:
二进制进行同位(同一位置上的数进行运算)运算
10010011
01110111
————————
  &:00010011      有0为0,全1为1
  |:11110111      有1为1,全0为0
  ^:11100100      相同为0,不同为1
    二进制移动符号:
>>>:无符号向右移动
>>:考虑正负符号向右移动,所有的二进制都要移动,空出的补0,但是符号位不变。

<<:无符号向左移动,所有的二进制都要移动,低位补0。

            Java io

    指针:RandomAccessFile这个类,不管是读还是写,底层都存在一个指针
    指针指的是每一次读写后所在的字符位置。默认第一个字符的下标为0.

4.IO流的分类

    Java io

        1):流按照传输方向来分类:
            输入流:外界的数据传输(送入,读取)到当前程序中
    输出流:当前程序的数据传输(写出)到外界。
        2):按照读写单位分类
    字节流:读写时最小单位为一个字节
    字符流:读写时最小单位为一个字符
        3):按照是否与外界设备直接相连分类:
    节点流:直接与外界设备相连的流类型
    处理流:间接的,一般内部都是封装了节点流。
        4):按照效率高低分类:
    低级流

    高级流

    输入(input):把外界(硬盘等)的数据读入到程序中。

    输出(output):把程序中的数据写出到外界。

5.字节流

    父类:InputStream和OutputStream,抽象类型

    子类型:

        文件字节流:

            FileInputStream(文件输入流):

                构造器:

    FileInputStream(File file)

    FileInputStream(String filepath)

                常用方法:

                    read():作用是读取一个字节,放入int类型数据的低八位上。

                    read(byte[] b):将数据读入到字节数组中,返回的是有效字节个数。

            FileOutputStream(文件输出流):

                构造器:

    FileOutputStream(File file[,boolean append])
    FileOutputStream(String filepath[,boolean append])
    如果指定的文件存在,会新建同名文件以覆盖原有文件,再从头开始写。
            第二个参数    boolean append
false:表示不追加,从文件的头部进行写出操作。
true:表示追加,从文件的尾部进行写出操作

                    输出流的特点:文件不存在,会自动创建文件。

                常用方法:

                    write(int num):写的是num的二进制的低八位
    write(byte[] b):将整个字节数组写出

    write(byte[] b,int startIndex,int length)

6.字节缓冲流

    为了提高书写效率,减少交互次数,设计了一个缓冲区,先将数据填入缓冲区,如果缓冲区的数据满了,在一次性清空出去。

BufferedInputStream

            构造器:BufferedInputStream(InputStream is)

BufferedOutputStream

            构造器:BufferedOutputStream(OutputStream os)

此缓冲流要以文件字节流为参数。
常用方法:
flush():作用是将缓冲区的数据清空出去。

特点:流关闭前,会清空缓冲区内的数据。

7.数据输入输出流

    DataInputStream

        构造器:DataInputStream(InputStream is)

    DataOutputStream

        构造器:DataOutputStream(OutputStream os)

8.对象输出输入流

    ObjectInputStream

        构造器:ObjectInputStream(InputStream is)

        作用:将一串字节序列转换成相应的对象(反序列化)

    ObjectOutputStream

        构造器:ObjectOutputStream(OutputStream os)

        作用:将对象转换成一串字节序列(序列化)

    序列化时应注意:
1:被序列化的对象的类型必须实现Serializable接口(此接口内是空的,只起到一个标志的作用)
2:提供序列化版本号的属性(以防类型被改变后不能反序列化的问题出现-兼容性问题)。
    序列化的修饰词:transient

作用:对象的某些属性没必要持久化时,可以在类型的这些属性前添加此修饰词。

9.字符流

    父类:

            输出流:Writer

    输入流:Reader

    子类:

            OutputStreamWriter(字符流中的基本流)

                构造器:

    OutputStreamWriter(OutputStream os[,String charset])

                        []:可有可无,charset:编码集

                常用方法:
     write(int num):参数num应该是一个字符(char类型),写出参数num的二进制的低十六位
     write(char[] ch):写出整个字符数组
     write(char[] ch,int startIndex,int length):
     write(String str):写出字符串

     write(String str,int startIndex,int length):

            InputStreamReader

                构造器:

                    InputStreamReader(InputStream is[,String charset])

                常用方法:

    int read():读取一个字符,存入int类型的数据的低16位上。

10.缓冲字符流

    缓冲输出流:

        BufferedWriter:

            构造器:

                BufferedWriter(OutputStreamWriter ost)

            常用方法:

                write(char ch):作用是写一个字符类型
write(char[] ch):作用是写出一个字符数组
write(char[] ch,int startIndex,int length):

write(String str):作用是写出一个字符串

                flush():实时性清空缓冲区

    缓冲输入流:

        BufferedReader:

            构造器:

                BufferedReader(InputStreamReader isr)

            常用方法:

                int read():返回一个字符的int数值
read(char[] ch):读取多个字符存入字符数组中

readLine():读取一行字符串,读不到数据返回null

11.PrintWriter

    PrintWriter这个类提供了行自动刷新功能。要使用println()方法,否则不自动刷新.

    构造器:

        PrintWriter(OutputStream os [,boolean autoFlush])

        PrintWriter(Writer wt,boolen autoFlush)

    常用方法:

        println():写出数据并自动刷新缓冲区