美文网首页
Java io 总结

Java io 总结

作者: 守住阳光 | 来源:发表于2018-06-06 10:09 被阅读0次

    一、File类

             File 类是 IO 包中唯一代表磁盘文件本身的对象,File 类定义了一些与平台无关的方法来操纵文件,通过调用 File 类提供的各种方法,我们能够创建、删除文件,重命名文件,判断文件的读写权限及是否存在,设置和查询文件的最近修改时间。

            在 Java 中,目录也被当作 File 使用,只是多了一些目录特有的功能——可以用 list方法列出目录中的文件名。在 Unix 下的路径分隔符为(/),在 Dos 下的路径分隔符为(\),Java 可以正确处理 Unix 和 Dos 的路径分隔符,即使我们在 Windows 环境下使用(/)作为路径分隔符,Java 仍然能够正确处理。

    二、RandomAccessFile 类

            RandomAccessFile 类可以说是 Java 语言中功能最为丰富的文件访问类,它提供了众多的文件访问方法。RandomAccessFile 类支持“随机访问”方式,我们可以跳转到文件的任意位置处读写数据。在你访问一个文件的时候,不想把文件从头读到尾,并希望像访问一个数据库一样的访问一个文本文件,使用 RandomAccessFile 类就是你的最佳选择。

            RandomAccessFile 对象类有个位置指示器,指向当前读写处的位置,当读写 n 个字节后,文件指示器将指向这 n 个字节后的下一个字节处。刚打开文件时,文件指示器指向文件的开头处,我们可以移动文件指示器到新的位置,随后的读写操作将从新的位置开始。RandomAccessFile 在等长记录格式文件的随机(相对顺序而言)读取时有很大的优势,但该类仅限于操作文件,不能访问其他的 IO 设备,如网络,内存映象等。

    三、节点流与处理流

    1、理解流的概念

            数据流是一串连续不断的数据的集合,就象水管里的水流,在水管的一端一点一点地供水,而在水管的另一端看到的是一股连续不断的水流。数据写入程序可以是一段、一段地向数据流管道中写入数据,这些数据段会按先后顺序形成一个长的数据流。对数据读取程序来说,看不到数据流在写入时的分段情况,每次可以读取其中的任意长度的数据,但只能先读取前面的数据后,再读取后面的数据。不管写入时是将数据分多次写入,还是作为一个整体一次写入,读取时的效果都是完全一样的。

    2、流的分类

            我们将 IO 流类分为两个大类,节点流类和过滤流类(也叫处理流类)。程序用于直接操作目标设备所对应的类叫节点流类,程序也可以通过一个间接流类去调用节点流类,以达到更加灵活方便地读写各种类型的数据,这个间接流类就是过滤流类(也叫处理流类),我更喜欢称之为包装类。

    3、节点流类总结

            父 类 InputStream OutputStream Reader Writer。

            文 件 *FileInputStream FileOutputStrean FileReader FileWriter 对文件进行处理的节点流。

            数 组 *ByteArrayInputStream ByteArrayOutputStream CharArrayReader CharArrayWriter 对数组进行处理的节点流(对应的不再是文件,而是内存中的一个数组)。

           字符串 *无  无 StringReader StringWriter 对字符串进行处理的节点流。

           管 道 *PipedInputStream PipedOutputStream PipedReader PipedWriter 对管道进行处理的节点流。

    4、处理流类总结

           父 类 InputStream OutputStream Reader Writer。

           缓冲流 *BufferedImputStrean BufferedOutputStream BufferedReader BufferedWriter,需要父类作为参数构造,增加缓冲功能,避免频繁读写硬盘,可以初始化缓冲数据的大小,由于带了缓冲功能,所以就写数据的时候需要使用flush方法。

           转换流 *InputStreamReader OutputStreamWriter,要inputStream或OutputStream作为参数,实现从字节流到字符流的转换。

           数据流 *DataInputStream DataOutputStream ,提供将基础数据类型写入到文件中,或者读取出来,为什么要有这个流呢?看这样的分析,如果没有这种流的话,有一个long,本身只占8个字节,如果我要写入到文件,需要转成字符串,然后在转成字符数组,那空间会占用很多,但是有了这种流之后就很方便了,直接将这8个字节写到文件就完了。是不是既节约了内存空间有让程序写起来更加方便简单了呢。写倒是很简单,但是读取的时候就注意了,根据读取的数据类型,指针会往下移,所以你写的顺序必须要和读的顺序一致才能完成你正确的需求。

          *ObjectInputStream ObjectOutputStrea

           *顺便研究序列化---将对象所在的类型全部转换成二进制,然后写入到介质中去。

      *transient关键字--修饰成员变量,不写入该成员变量。

      *Serializable接口--表示接口,怎样实现的呢,在序列化之前,首先判断 (对象 instanceof Serializable)如果返回true则执行序列化,否者抛出异常,并且里面有一个ID,是用来快速查找某个对象的时候使用的。

      *Externalizable接口--外部化接口;他是Serializable接口的子接口,能手动控制序列化的方式。

            java.io中专门提供用于打印的流(这类流在写入的时候有自动flush的功能,所以你不需要每打印一个东西都flush一次)--------注意他们也是属于处理流,只不过这里单独列出来分析而已。

      *PrintStream--继承自-->FilterOutputStream--继承自-->OutputStream,(它的构造函数需要OutputStream对象)。

            *PrintWriter---继承自-->Writer(它的构造函数需要Writer对象)

       System.In====InputStream

       System.Out===PrintStream

       这种流的print方法不会抛出异常,这是JSP技术中常用的流,如果在JSP页面的打印会抛出异常的话,那JSP也太难写了点!注意理解这样的设计思路。

      --看这样的代码

      PrintStream ps=new PrintStream(new OutputStream("c://..."));

      System.setOut(ps);

      System.Out.println("jfdajsflkajdf");//这样将不会在打印到命令行窗口,而是指定的PrintStream目标文件里面去

    相关文章

      网友评论

          本文标题:Java io 总结

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