Java IO流

File类 表示的是一个文件 / 目录  该文件/目录可以存在 也可以不存在  即使不存在 我们可以利用对应的方法创建一个文件

   File(String   pathname) 通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例

   File(String   parent, String child) 从父路径名字符串和子路径名字符串创建新的   File实例

   File(File   parent, String child) 从父抽象路径名和子路径名字符串创建新的   File实例

   常用方法:

      exists() 判断文件或者目录是否有存在     不存在返回false 存在返回true

      createNewFile() 用来创建文件

      public boolean mkdir() 创建目录 / 文件夹

      public boolean mkdirs() 创建目录 文件夹 递归创建

      delete() 删除文件或者问价夹

      isFile() 判断是是否为文件

      isDirectory()  判断是是否为目录

   绝对路径: 包括完整的路径名+文件名

   相对路径: 相对于某个位置(基准点)进行下一步的寻找

     public   String getAbsolutePath() 返回此抽象路径名的绝对路径名字符串

     public   String getPath() 将此抽象路径名转换为路径名字符串

     public   String getName() 返回由此抽象路径名表示的文件或目录的名称

     public   File[] listFiles() 返回此抽象路径名表示的目录中的文件和目录的File对象数组

IO流:

   流向: 输入流 读数据

         输出流  写数据

   类型: 字节流

             字节输入流  超类/父类

               子类: FileInputStream  使用该类创建输入流对象

                    public FileInputStream(String name) 从那个文件读数据

                    public FileInputStream(File file)

               方法: read 读数据 public int read() 每次只读一个字节 返回对应的字节数

                               read(byte b[]) 返回为读到的实际字节个数 将读到的字节个数保存到字节数组中

                               如果读不到返回值为-1

                               public int read(byte b[], int off, int len) 将读到字节数保存进数组中,从指定off位置开始存,存len个,剩余的用0替代

                    close 关闭流 使用try...catch...finally 处理Io异常 无论是否发生异常,流都可以关闭

                                将关闭流的操作放到finally里面

             字节输出流  超类/父类  OutputStream   抽象类

               子类: FileOutputStream  使用该类创建输出流对象

                     public FileOutputStream(String name) 构造方法的参数的含义:将内容写向哪个文件

                     public FileOutputStream(File file)

                     public FileOutputStream(String name, boolean append) 参数布尔类型 代表是否为追加

                     public FileOutputStream(File file, boolean append)

              方法:write 写数据   public  void write(int b) 一次写一个字节

                                 public void write(byte b[]) 一次写一个字节数组的内容

                                 public void write(byte b[], int off, int len) 从字节数组的指定位置开始写,然后写多少个

                    close 关闭流  使用try...catch...finally 处理Io异常 无论是否发生异常,流都可以关闭

                                 将关闭流的操作放到finally里面

        字节缓冲流:

                  BufferedOutputStream(OutputStream out) 创建字节缓冲输出流对象

                  BufferedInputStream(InputStream in)   创建字节缓冲输入流对象

                  常用方法和字节输入和输出流的常用方法是一样的

        字符流

             字符输入流

                Reader: 用于读取字符流的抽象父类

                FileReader: 用于读取字符流的常用子类

                常用的构造方法:

                  FileReader(File file) 在给定从中读取数据的 File 的情况下创建一个新 FileReader

                  FileReader(String fileName) 在给定从中读取数据的文件名的情况下创建一个新 FileReader

                   常用方法:

                    read() 一次只读一个字符 返回对应的字符的编码  读不到返回-1

                    read(char cbuf[]) 一次读取多个字符,将字符保存进字符数组中,返回读到的字符数

                    public int read(char cbuf[], int off, int len) 一次读取多个字符 将其放入到字符数组中,

                        从off指定的索引位置开始放,放len个

                    close() 关闭流  流一旦关闭 不能在读东西了 会报java.io.IOException: Stream closed

             字符输出流

                Writer: 用于写入字符流的抽象父类  常用的实现类是FileWriter

                 构造方法:

                    FileWriter(File file) 根据给定的 File 对象构造一个 FileWriter 对象

                    FileWriter(File file, boolean append) 根据给定的 File 对象构造一个 FileWriter 对象

                    FileWriter(String fileName) 根据给定的文件名构造一个 FileWriter 对象

                    FileWriter(String fileName, boolean append) 根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象

                    常用方法: 写 线程安全的 加了synchronized关键字

                     public void write(int c)  一次写出一个字符

                     public void write(char cbuf[]) 将字符数组中的内容全部写出

                     public void write(char cbuf[], int off, int len) 从字符数组的指定位置开始写,写len个字符

                     public void write(String str) 一次写出整个字符串的内容

                     public void write(String str, int off, int len) 从字符串的指定位置开始写,写len个字符

                     close() 关闭输出流  流一旦关闭 不能在写东西了 会报java.io.IOException: Stream closed

                     flush() 不会关闭流 将流中的数据强制刷新出来 可以接着写数据

                                           二者都能将数据写出的原因: 调用了StreamEncoder.writeBytes将数据写出去

             字符缓冲流:

                 BufferedWriter: 字符缓冲输出流  线程安全的

                    1、 public BufferedWriter(Writer out) {

                              this(out, defaultCharBufferSize);

                          }

                        需要一个Writer对象,创建一个默认的缓冲区大小 默认大小为8192 / 8kb

                    2、 public BufferedWriter(Writer out, int sz) 第二个参数代表自己设定缓冲区的大小

                        sz参数要>0,小于等于0会抛异常

                    常用方法:

                       newLine() 换行 ===>  write("\n"); newLine() 根据当前系统决定使用哪个符号进行换行

                       public void write(int c)  一次写出一个字符

                       public void write(char cbuf[]) 将字符数组中的内容全部写出

                       public void write(char cbuf[], int off, int len) 从字符数组的指定位置开始写,写len个字符

                       public void write(String str) 一次写出整个字符串的内容

                       public void write(String str, int off, int len) 从字符串的指定位置开始写,写len个字符

                    关闭流:

                       close() 关闭流同时清空缓冲区  因为可能出现缓冲区数据不满,不往外写,造成数据丢失

                       flush() 清空缓冲区 不关闭流 。

                       缓冲区满了以后,也会自动将数据写到指定的文件中

                           if (nextChar >= nChars)

                              flushBuffer(); 清空缓冲区 将内容写到文件中

             字符缓冲输入流:

                BufferedReader: 字符缓冲输入流

                  构造方法:

                     public BufferedReader(Reader in) 需要一个Reader对象,创建一个默认的缓冲区大小 默认大小为8192 / 8kb

                     public BufferedReader(Reader in, int sz) 第二个参数代表自己设定缓冲区的大小

                                                              sz参数要>0,小于等于0会抛异常

                  常用方法:

                     readLine() 一次读取一行数据 如果读取不到返回null

                     read() 一次只读一个字符 返回对应的字符的编码  读不到返回-1

                     read(char cbuf[]) 一次读取多个字符,将字符保存进字符数组中,返回读到的字符数

                     public int read(char cbuf[], int off, int len) 一次读取多个字符 将其放入到字符数组中,

                     从off指定的索引位置开始放,放len个

             转换流:

                  InputStreamReader(InputStream in) 使用默认字符编码创建InputStreamReader对象

                  InputStreamReader(InputStream in,String charset) 使用指定的字符编码创建InputStreamReader对象

                  OutputStreamWriter(OutputStream out) 使用默认字符编码创建OutputStreamWriter对象

                  OutputStreamWriter(OutputStream out,String charset) 使用指定的字符编码创建OutputStreamWriter对象

Properties  : 父类也是Map  Map类型存储键值对  map中的键和值可以是任何类型

                          Properties存储键值对  Properties中的键和值只能是String类型的 线程安全的

              设置key和value的值: setProperty(String key,String value) 要求key和value都是String类型

              获取value的值: getProperty(key) 通过key可以获取到value值

              获取所有的key值: stringPropertyNames() 通过此方法我们获取到的是Set<String>的集合

         Properties和IO流相结合的方法

            和IO流结合的方法

              void load(Reader reader) 从输入字符流读取属性列表(键和值)

              void store(Writer writer, String comments) 将propertis中的内容写到指定的文件中,后面的参数的是用来对内容进行解释说明的,注释的作用4

对象序列化流: 将一个对象写入到我们指定的本地文件中 在网络传输中也会用到对象序列化流

             把对象保存进文件中,序列化,从文中读取数据,保存成对象,反序列化

            序列化流: ObjectOutputStream(OutputStream out)

                   1、对象必须实现java.io.Serializable接口

                   2、ObjectOutputStream.writeObject(Object obj)将对象写到(序列化)本地文件中

对象反序列化流: 将本地的文件(必须是序列化来的文件)读取回来,将其封装成对应的对象

            反序列化流: ObjectInputStream(InputStream in)

                   1、对象必须实现java.io.Serializable接口

                   2、ObjectOutputStream.readObject()将文件的内容反序列化成一个对象

            序列化完毕后,如果改变了类的属性名,那么就不能在反序列化回来

            默认情况下: 在序列化的时候,会根据对象的属性(非transient修饰的)计算出一个序列化id,伴随着我们序列化保存到我们的

            本地文件中,在反序列化的时候,会比较本地文件中的序列化id和当前类的新生成的序列化id(类的属性(非transient修饰的)生成)进行对比

            如果一样,说明类的属性没有改过,可以反序列化成功,否则,抛异常

            在改变类中的属性的情况下,还想反序列化成功,1、重新序列化

                                               2、自己设定一个序列化id,无论是否改变属性,序列化id是不变的

                                                   private static final long serialVersionUID = 42L;

            transient:

               成员变量加transient关键字修饰,该关键字标记的成员变量不参与序列化过程.

               加上该关键字,不影响反序列化,只要序列化id没有改变,就可以反序列化回来。

               该成员变量在获取时就是默认值。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值