Java的IO基础学习

来源:互联网 发布:网红晚晚的淘宝店 编辑:程序博客网 时间:2024/05/22 01:27

1、Java.io.File类的使用

    IO原理及流的分类:

      文件流:(重点)

         FileInputStream/FileOutputStream/FileReader/FileWriter

      缓冲流:(重点)

         BufferedInputStream/BufferedOutputStream/BufferedReader/BufferedWriter

      转换流:

         InputStreamReader/OutputStreamWriter

      标准输入/输出流:

      打印流:

         PrintStream/PrintWriter

      数据流:

         DataInputStream/DataOutputStream

      对象流  --  涉及序列化、反序列化  (重点)

         ObjectInputStream/ObjectOutputStream

      随机存取文件流  (重点) 既能存又能取

          RandomAccessFile

2、java.io.File类

     1、凡是与输入、输出相关的类、接口等都定义在java.io包下

     2、File是一个类,可以有构造器创建对象,此对象对应着一个文件(.txt .avi .doc .ppt .jpg)或文件目录

     3、File类的对象是与平台无关的。

     4、File中的方法,仅涉及发到如何让创建、删除、重命名等等(主要是涉及文件内容的,File是无能为力的,必须由io流来完成)

     5、File类的对象常作为io流的具体类的构造器的形参。

     file1.renameTo(file2):file1重命名为file2.要求:file1文件一定存在,file2一定不存在(要保证都是文件或者都是文件目录)

     mkDir():创建一个文件目录,只有上层文件目录存在的情况下,才能返回true

     mkDirs():创建一个文件目录,若上层文件目录不存在,一并创建

     list():返回文件夹下的文件字符串数组

     listFiles();返回文件夹下的File数组

3、路径:

     ① 相对路径:包括盘符在内的完整路径

     ②相对路径:在当前文件目录下的文件的路径

4、流的分类:

      按照数据流向的不同:输入流、输出流

      按照处理数据的单位不同:字节流、字符流(处理的文本文件)

      按照角色的不同:节点流(直接作用于文件的)、处理流

5、IO的体系:

      抽象基类                  节点流(文件流)              缓冲流(处理流的一种,可以提升文件的传输效率)  

      InputStream             FileInputStream                  BufferedInputStream

      OutputStream          FileOutputStream                BufferedOutputStream(bos.flush())

      Reader                     FileReader                          BufferedReader(br.line())

      Writer                       FileWriter                             BufferedWriter(bw.flush())

    注:word文件中包含图片等,不是纯粹的文本文件,所以应使用字节流

6、转换流:

      转换流提供了在字节流和字符流之间的转换

      Java API提供了两个转换流:

           InputStreamReader (解码:字节数组--》字符串) 和 OutputStreamWriter  (编码:字符串--》字节数组)

      字节流中的数据都是字符时,转换成字符流操作更高效

7、打印流(都是输出流):PrintStream   PrintWriter

      可是使用System.setOut(PrintStream p)   重新设置一下输出的位置

      PrintStream p = new PrintStream(new FileOutputStream("hello.text"),true)

8、数据流:

      为了方便地操作Java语言的基本数据类型的数据,可以使用数据流

      数据流有两个类:(用于读取和写出基本数据类型的数据)

          DataInputStream 和 DataOutputStream

          分别 “套接” 在InputStream 和 OutputStream 节点流上

       DataInputStream中的方法:

          boolean readBoolean()                 byte readByte()

          char readChar()                            float readFloat()

          double readDouble()                     short readShort()

          long readLong()                             int readInt()

          String readUTF()                            void readFully(byte[] b)

       DataOutputStream中的方法:

           将上述的方法的read改为相应的write即可。

9、对象流:

      ObjectInputStream 和 ObjectOutputStream

      用于存储和读取对象的处理流。他的强大之处就是可以把Java中的对象写入到数据源中,也能把对象从数据源中还原回来。

      序列化(Serialize):用ObjectOutputStream类将一个Java对象写入IO流中

      反序列化(Deserialize):用ObjectInputStream类从IO流中恢复该Java对象

      ObjectOutputStream 和 ObjectInputStream 不能序列化static和transient修饰的成员变量

      如何创建流的对象:

      ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File("properties.text")))

      ObjectInputStream ois = new ObjectInputStream(new FileInputStreamStream(new File("ss.text")))                        

10、对象的序列化 :

       对象序列化机制允许把内存中的Java对象转换成平台无关的二进制流,从而允许把这种二进制流持久地保存在磁盘上,或者通过网络将这种二进制流传输到另一个网络节点。当其他程序获取了这种二进制流,就可以恢复成原来的Java对象。

       序列化的好处在于可将任何实现了Serializable接口的对象转化为字节数据,使其在保存和传输时可以被还原。

       序列化是RMI(Remote Method Invoke - 远程方法调用)过程的参数和返回值都必须实现的机制,而RMI是javaEE的基础。因此序列化机制是JavaEE平台的基础。

       如果需要让某个对象支持序列化机制,则必须让其他类是可序列化的,为了让某个类是可序列化的,该类必须实现如下两个接口之一:

            Serializable

            Externalizable 

       凡是实现Serializable接口的类都有一个表示序列化版本标识符的静态变量:

            private static final long serialVersionUID;

            serialVersionUID用来表明类的不同版本间的兼容性

            如果类没有显示定义这个静态变量,它的值是Java运行时环境根据类的内部细节自动生成的。若类的源代码作了修改,serialVersionUID可能发生变化。故建议,显示声明

       显示定义serialVersionUID的用途:

           希望类的不同版本对序列化兼容,因此需要确保类的不同版本具有相同的serialVersionUID

            不希望类的不同版本对序列化兼容,因此需确保类的不同版本具有不同的serialVersionUID

       要实现序列化的类:

           1、要求此类是可序列化的,实现序列化接口Serializable

           2、要求类的属性同样的要实现serializable接口

           3、提供一个版本号

           4、static和transient修饰的成员变量不能序列化(这个信息是加载不进去的)

11、RandomAccessFile:

       RandomAccessFile类支持“随机访问”的方式,程序可以直接跳到文件的任意地方来读、写文件

           支持只访问文件的部分内容

           可以向已存的文件后追加内容

       RandomAccessFile对象包含一个记录指针,用以标示当前读写处的位置。RandomAccessFile类对象可以自由移动记录指针:

            long getFilePointer() : 获取文件记录指针的当前位置

            void seek(long pos) : 将文件记录指针定位到pos位置

        构造器:

            public RandomAccessFile(File file,String mode)

            public RandomAccessFile(String name,String mode)

        创建RandomAccessFile类实例需要制定一个mode参数,该参数制定RandomAccessFile的访问模式:

             r:以只读方式打开

             rw:打开以便读取和写入

             rwd:打开以便读取和写入:同步文件内容的更新

             rws:打开以便读取和写入:同步文件内容和元数据的更新

        RandomAccessFile:支持随机访问

             1、既可以充当一个输入流,又可以充当输出流

             2、支持从文件头读取、写入(实现的是覆盖)

             3、支持从任意位置的读取、写入(插入:需要取出,再写入)

0 0
原创粉丝点击