I/O流笔记

I/O

    一、流的概念

        流是一组有序的数据序列,将数据从一个地方带到另一个地方。

     1、什么是输入/输出流

            输入就是将数据从各种输入设备(包括文件、键盘等)中读取到内存中,输出则正好相反,是将数据写入到各种输出设备。

     数据流是Java进行I/O操作的对象,它按照不同的标准可以分为不同的类别:

  1. 按照流的方向主要为输入流和输出流两大类。
  2. 数据流按照数据单位的不同分为字节流和字符流。
  3. 按照功能可以划分为节点流和处理流。

     2、输入流

        Java流相关的类都封装在java.io包中,每个数据流都是一个对象。

所有的输入流类都是InputStream抽象类(字节输入流)和Reader抽象类(字符输入流)的子类。InputStream类是字节输入流是字节输入流的父类。

  InputStream 类中常用的方法:

      Int read():从输入流读入一个8字节的数据,将它转换成一个0-255的整数,返回一个整数,遇到输入流结尾返回-1。

      Int read(byte[]b): 从输入流读取若干字节的数据保存到参数 b 指定的字节数组中,遇到结尾返回-1.

      Int read(byte[]b,int off,int len): 返回的是实际读取的字节数.遇结尾返回-1.

      Void close():关闭数据流,完成操作后需关闭数据流。

      Void reset():使输入流重新定位到刚才被标记的位置,这样可以重新读取标记过的数据。

    3、输出流

       Java 中所有输出流类都是 OutputStream 抽象类(字节输出流)和 Writer 抽象类(字符输出流)的子类。

    OutputStream更数据输出有关的方法:

int write(b):将指定字节的数据写入到输出流

int write(byte[]b):将指定字节数组的内容写入输出流。

int write(byte[]b,int off,int len):将指定字节数组从off位置开始的len字节的内容写入输出流。

flush():刷新输出流,强行将缓冲区的内容写入输出流。

二、系统流

Sytem 类封装了 Java 程序运行时的 3 个系统流,分别为:

    System.in:标准输入流,默认设备为键盘

    System.out:标准输出流,默认设备为控制台

    System.err:标准错误流,默认设备为控制台

   以上变量的作用域为 public 和 static

三、File类(文件操作类)

     1、File类简介

      File 类不能访问文件内容本身,如果需要访问文件内容本身,则需要使用输入/输出流

       File类提供了如下三种构造方法:

        File(String path):如果path是实际存在的路径,则该 File 对象表示的是目录;如果 path 是文件名,则该File对象表示的是文件。

File(String path,String name):path是路径名,name是文件名。

File(File dir,String name):dir是路径对象,name是文件名

   File类的常用的方法:

      boolean canRead():测试应用程序是否能从指定的文件中进行读取;

      boolean canWrite():测试应用程序是否能写当前文件;

      boolean delete()删除当前对象指定的文件

      boolean exists():测试当前File是否存在;

      String getAbsolutePath():返回由该对象表示的文件的绝对路径名;

      String getName():返回表示当前对象的文件名或路径名(如果是路径,则返回最后一级子路径名);

      String getParent():返回当前 File 对象所对应目录(最后一级子目录)的父目录名;

     long length():返回当前File对象表示的文件长度;

     String[]list():返回当前File对象指定的路径文件列表;

     Boolean mkdir():创建一个目录,它的路径名由当前File对象指定;

     Boolean mkdirs():创建一个目录(可同时创建多个),它的路径名由当前File对象指定;

2、获取文件属性

   获取文件属性信息的第一步是先创建一个 File 类对象并指向一个已存在的文件。

3、创建和删除文件

   创建文件需要调用createNewFile()方法。删除需调用delete()方法。

无论是创建还是删除文件都要先调用exists()方法判断文件是否存在。

4、创建和删除目录

   创建目录需调用mkdir()方法,删除目录需要调用delete()方法,同样也需要调用exists()方法来判断目录是否存在。

5、遍历目录

   有两种重载形式:

  1. String[] list():该方法表示返回由 File 对象表示目录中所有文件和子目录名称组成的字符串数组,如果调用的 File 对象不是目录,则返回 null;
  2. String[] list(FilenameFilter filter):作用与list()方法相同,不同之处在于返回数组中仅包含符合filter过滤器的文件的目录,如filter为null,则表示接受所有名称。

四、RandomAccessFile类

   1、动态读取文件内容

      动态读取是指从文件的任意位置开始访问文件,而不是必须从文件开始位置读取到文件末尾。需用到RandomAccessFile类。

   该类提供了如下常用的读取和写入数据的方法:

     boolean readBoolean():从文件中读取一个boolean值

     byte readByte():从文件中读取一个带符号的字节

     char\int\long与上类似;

    String readLine():从文件中读取下一行文本

void writeByte(int v):以单字节的形式向文件中写入一个 byte 值

void writeChar(int v):以双字节的形式向文件中写入一个 char 值

void writelnt(int v):以4字节的形式向文件中写入一个整数

writeLong(long v):以8字节的形式向文件中写入一个 long 值

void skipBytes(int n):以当前文件指针位置为起始点,跳过 n 字节

   RandomAccessFile类的两种重载形式:

      1、RandomAccessFile(File file, String mode):访问参数 file 指定的文件,访问形式由参数 mode 指定,mode 参数有两个常用的可选值 r 和 rw,其中 r 表示只读,rw 表示读写。

2、RandomAccessFile(String name, String mode):访问参数 name 指定的文件,mode 参数的含义同上。

五、字节流的使用

   InputStream是Java所有字节输入流类的父类,OutputStream是所有字节输出流类的父类,它们都是抽象类

1、字节输入流

InputStream类的子类:

    ByteArrayInputStream 类:将字节数组转换为字节输入流,从中读取字节。

FileInputStream 类:从文件中读取数据

  2、字节输出流

OutputStream类常用的子类:

    ByteArrayOutputStream 类:向内存缓冲区的字节数组中写数据。

FileOutputStream 类:向文件中写数据。

PipedOutputStream 类:连接到一个 PipedlntputStream(管道输入流)

  3、字节数组输入流

ByteArrayInputStream 类:可以从字节数组中读取数据,该类的重载形式有:

  1、ByteArrayInputStream(byte[] buf):创建一个字节数组输入流,字节数组类型的数据源由参数 buf 指定。

2、ByteArrayInputStream(byte[] buf,int offse,int length):创建一个字节数组输入流,其中,参数 buf 指定字节数组类型的数据源,offset 指定在数组中开始读取数据的起始下标位置,length 指定读取的元素个数。

  4、字节数组输出流

   ByteArrayOutputStream 类:可以向内存的字节数组中写入数据,该类的构造方法有两种重载形式:

    1、ByteArrayOutputStream():创建一个字节数组输出流,输出流缓冲区的初始容量大小为 32 字节。

2、ByteArrayOutputStream(int size):创建一个字节数组输出流,输出流缓冲区的初始容量大小由参数 size 指定。

六、字符流的使用

    1、字符输入流

      Reader类是所有字符流输入类的父类,其常用子类有:

        CharArrayReader 类:将字符数组转换为字符输入流,从中读取字符。

StringReader 类:将字符串转换为字符输入流,从中读取字符。

BufferedReader 类:为其他字符输入流提供读缓冲区

InputStreamReader

  • InputStreamReader是从字节流到字符流的桥梁:它读取字节,并使用指定的charset将其解码为字符。它使用的字符集可以由名称指定,也可以被明确指定,或者可以接受平台的默认字符集。
    每个调用InputStreamReader的read()方法之一可能会导致从底层字节输入流读取一个或多个字节。为了使字节有效地转换为字符,可以从底层流读取比满足当前读取操作所需的更多字节。

方法:

   String getEncoding():返回此流使用的字符编码的名称

   int  read()读一个字符

   int read(char[] cbuf,int offset,int length):将字符读入数组的一部分。

readLine读取一整行。

BufferedReader:按行读取内容

 BufferedInputStream为另一个输入流添加了功能,即缓冲输入并支持mark和reset方法的功能。创建BufferedInputStream将创建一个内部缓冲区数组。当从流中读取或跳过字节时,内部缓冲区将根据需要从所包含的输入流中重新填充,一次很多字节。mark操作会记住输入流中的一个点,并且reset操作会导致从最近的mark操作读取的所有字节在从包含的输入流中取出新字节之前重新读取。

BufferedInputStream的构造方法:  

构造方法摘要
构造方法 

Constructor

描述

BufferedInputStream(InputStream in)

创建一个 BufferedInputStream并保存其参数,输入流 in供以后使用。

BufferedInputStream(InputStream in, int size)

创建具有指定缓冲区大小的 BufferedInputStream ,并保存其参数,输入流 in供以后使用。

    2、字符输出流

       Writer类是所有字符输出流的父类,该类常用的子类有:

          CharArrayWriter 类:向内存缓冲区的字符数组写数据。

StringWriter 类:向内存缓冲区的字符串(StringBuffer)写数据。

BufferedWriter 类:为其他字符输出流提供写缓冲区。

     3、字符文件输入流

       用来读取字符文件的类:FileReader。该类有如下的重载形式:

         1、FileReader(File file):在给定要读取数据的文件的情况下创建一个新的 FileReader 对象。其中,file 表示要从中读取数据的文件。

2、FileReader(String fileName):在给定从中读取数据的文件名的情况下创建一个新 FileReader 对象。其中,fileName 表示要从中读取数据的文件的名称,表示的是一个文件的完整路径。

4、字符文件输出流

       Java 提供了写入字符文件的类:FileWriter,构造方法的重载形式有:

          1、FileWriter(File file):在指定 File 对象的情况下构造一个 FileWriter 对象。其中,file 表示要写入数据的 File 对象。

2、FileWriter(File file,boolean append):在指定 File 对象的情况下构造一个 FileWriter 对象,如果 append 的值为 true,则将字节写入文件末尾,而不是写入文件开始处。

3、FileWriter(String fileName):在指定文件名的情况下构造一个 FileWriter 对象。其中,fileName 表示要写入字符的文件名,表示的是完整路径。

4、FileWriter(String fileName,boolean append):在指定文件名以及要写入文件的位置的情况下构造 FileWriter 对象。其中,append 是一个 boolean 值,如果为 true,则将数据写入文件末尾,而不是文件开始处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值