一、什么是IO流

1.1 概述

  • IO流是输入和输出的数据,也称为数据流。流形象的概念,可以理解为是一种“数据的管道”。管道中流动的东西可以是基于字节,也可以是基于字符的。
  • 程序需要读取数据的时候,就会开启一个通向数据源的管道,程序就可以从中提取数据。其输入输出的过程可以用下图来表示。

image.png

  • 程序从数据源(包括各种输入设备,如键盘、磁盘、文件等)中读取数据称之为输入。
  • 程序将数据写入目标设备(包括各种输出设备,如显示器、磁盘、文件等)称之为输出。

image.png

1.2 Java中的数据流

  • Java中的数据流分为2种:

    • 一种是字节流:在输入输出过程中以字节(8位单字节)为单位 。
    • 一种是字符流:在输入输出过程中以字符(16位双字节)为单位。

      二、IO流操作

      IO流主要由4个抽象类来表示:InputStream、OutputStream、Reader、Writer,输入输出各两种:
  • 其中InputStream和OutputStream表示字节流。

  • Reader和Writer表示字符流,其他流均是继承这4个抽象类而来的。

    2.1 字符输入流

    1、字符输入流用于以字符的形式从数据源中读取数据。Reader类是字符输入流的基类,该类包括的子类有:
    image.png
    2、Reader类中定义的方法及方法描述:
方法 方法描述
abstract void close() 关闭输入流
void mark () 在输入流中标记当前位置
boolean markSupported () 测试输入流是否支持mark()和reset()方法
int read () 从输入流读取下一字符
int read (char[] cbuf) 从输入流读取若干字符数据,并存储到字符数组
abstract int read (char[] cbuf, int off, intlen) 从输入流读取至多len个字符数据,并存储到字符数组
boolean void ready () 判断是否准备读取输入流
void reset () 将输入流重新定位到mark()方法标记的位置
long skip (long n) 跳过输入流中n个字符数据

【例2.1-1】在c:\temp下创建文本文件example01.txt,内容如下:
image.png
读取文件内容并去掉逗号输出。
image.png

2.2 字符输出流

1、字符输出流用于以字符的形式将数据写入目标设备。Writer类是字符输出流的基类,该类包括的子类有:
image.png
2、Writer类中定义的方法及方法描述:

方法 方法描述
abstract void close() 关闭输出流
abstract void flush() 刷新输出流,强制将缓冲区内容写入输出流
void write(char[] cbuf) 将指定字符数组的内容写入输出流
abstract void write(char[] cbuf,int off,int len) 将指定字符数组从off位置开始的len个字符写入输出流
write(int c) 将指定的字符写入输出流
write(String str) 将指定的字符串写入输出流
write(String str,int off,int len) 将指定字符串从off位置开始的len个字符写入输出流

【例2.2-1】将c:\temp下文本文件example01.txt复制到c:\temp下并改名为example02.txt。
image.png

2.3 字节流

1、字节流与字符流操作方法一样。
2、字节输入流InputStream,子类为FileInputStream。
3、字节输出流OutputStream,子类为FileOutStream。
4、将以上2例题用字节流改写。

三、文件类File

3.1 文件类

  • File类是一个可以对文件本身的属性进行操作的类。例如,可以使用File类中的方法获取文件或者目录的信息,还可以对文件进行创建、修改和删除等操作。
  • File类除了对文件进行操作外,Java允许使用File类将目录当作文件进行处理。

1、File类定义的一些主要方法

方法 方法描述
booleancanRead() 判断文件是否可读,可读则返回真,否则返回假
booleancanWrite() 判断文件是否可写,可写则返回真,否则返回假
boolean exists() 判断文件是否是指定路径中的文件或目录,是则返回真,否则返回假
booleanisFile() 判断File的对象是否是文件,是则返回真,否则返回假
booleanisDirectory() 判断File的对象是否是目录,是则返回真,否则返回假
booleanisAbsolute () 判断File的对象是否是一个文件或目录的绝对路径,是则返回真,否则返回假
String getAbsolutePath() 返回一个包含文件或目录的绝对路径的字符串
long length() 返回文件字节长度,若为目录则返回0
boolean delete() 删除文件或目录,成功返回true

【例2.3-1】将c:\temp下文本文件example01.txt复制到c:\temp\当天日期目录下并改名为example02.txt。
image.png
image.png
【练习】
1、将c:\temp下文本文件example01.txt复制到c:\temp\当天日期目录下,文件名以时间戳为文件名。