小栗子
从磁盘中指定文件夹中读取文件
import java.io.*;
public class TestFileReader {
public static void main(String[] args) throws Exception {
FileReader fr = new FileReader("D:\\share\\TestFileReader.java");
int ch;
ch = fr.read();
while(-1 != ch) {
System.out.printf("%c", (char)ch);
ch = fr.read();
}
fr.close();
}
}
流的定义
流的分类标准
- java.io 包中定义了多个流类型(类或抽象类)来实现输入/输出功能:可以从不同的角度对其进行分类
- 按数据流的方向不同可以分为输入流和输出流。
- 按处理数据单位不同可以分为字节流和字符流。
- 按功能不同可以分为节点流和处理流。
- J2SDK 所提供的所有流类型位于包java.io内部分别继承自一下四种抽象流类型。
字节流 | 字符流 | |
---|---|---|
输入流 | InputStream | Reader |
输出流 | OutputStream | Writer |
节点流与处理流
必须掌握的知识
- 什么叫流?
- 流与类的关系
- 如果一个类是用作设备和程序之间的数据传输,则这个类有一个新的名字叫流
- 流一定是类,但类不一定是流
- 原始流与包裹流的关系
四大基本抽象流
- InputStream 和 OutputStream 读写数据的单位是一个字节
- Reader 和 Writer 读写数据的单位是一个字符
- 在java中一个字符占两个字节
- InputStream 、OutputStream 、Reader 、Writer 都是抽象类,或者说都是抽象流,通常我们使用的都是它们的子类
- 凡是以Stream结尾的都是字节流
InputStream 流中常用的方法
- public int read() throws IOException
- 读取一个字节并以整数形式返回
- 如果读取到输入流的末尾返回-1
- public int read(byte[] b) throws IOException
- 从输入流中读取一定数量的字节,并将其存储在缓冲区数组b中。以整数形式返回实际读取的字节数。
- 如果b的长度为0,则不读取任何字节并返回0,如果因为流位于文件末尾而没有可用的字节,则返回值-1;
- 比如:FileInputStream fis = new FileInputStream (“D:\share\errorlog.txt”);
- len = fis.read(buf); // 从fis流所关联的D:\share\errorlog.txt文件中读取数据,并将读取出来的数据写入buf数组中,返回值是实际写入buf数组的字节个数,如果读取到文件的结尾,则返回-1
- public int read(byte[] b, int off, int len) throws IOException
- 从输入流中最多读取 len 个字节的数据并存入 byte 数组中
- b 表示读取的数据要存入的数组的名字
- off 表示第一个读出的数据要存入的位置,是下表
- len 表示最多能读取的字节数
- 将从输入流所关联到的设备中读取的第一个字节存储在元素 b[off]中,下一个字节存储在 b[off+1] 中,依次类推,读取的字节最多等于 len
- 尝试读取 len 个字节,但读取的字节也可能小于该值,以整数形式返回实际读取的字节数。
- 如果读到了文件的末尾,则返回-1
- void close() throws IOException
- 关闭此输入流并释放与该流关联的所有系统资源
- long skip(long n) throws IOException
- 跳过和丢弃此输入流中数据的n个字节。这个用的很少
public class Test {
public static void main(String[] args) {
FileReader fr = new FileReader("D:\\share\\Test.java");
int ch;
ch = fr.read();
while(-1 != ch) {
System.out.printf("%c", ch);
ch = fr.read();
}
fr.close();
}
}
OutputStream 流中常用的方法
- void write(int b) throws IOException
向输出流中写入一个字节数据,该字节数据为参数b的地8位 - void write(byte[] b) throws IOException
将一个字节类型的数组中的数据写入输出流 - void write(byte[] b, int off, int len) throws IOException
将一个字节类型的数组中的从指定位置(off)开始的len个字节写入到输出流 - void close() throws IOException
关闭流释放内存资源 - void flush() throws IOException
将输出流中缓存的数据全部写出到目的地
Reader 流的常用方法
- int read() throws IOException
读取一个字符并以整数的形式返回(0~255)
如果返回-1已到输入流的末尾 - int read(char[] cbuf) throws IOException
读取一系列字符并存储到一个数组buffer,返回实际读取的字符数,如果读取前已到输入流的末尾则返回-1 - int read(char[] cbuf, int offset, int length) throws IOException
最多读取length个字符,并存储到一个数组buffer,从length位置开始,返回实际读取的字符数,如果读取前已到输入流的末尾则返回-1 - void close() throws IOException
关闭流释放内存资源 - long skip(long n) throws IOException
跳过 n 个字符不读,返回实际跳过的字节数
Writer 流中常用方法
- void write(int c) throws IOException
向输出流中写入一个字符数据,该字节数据为参数b的地16位 - void write(char[] cbuf) throws IOException
将一个字符类型的数组中的数据写入输出流 - void write(char[] cbuf, int offset, int length) throws IOException
将一个字符类型的数组中的从指定位置(offset)开始的length个字符写入到输出流 - void write(String string) throws IOException
将一个字符串中的字符写入到输出流 - void write(String string, int offset, int lenght) throws IOException
将一个字符串从offset开始的length个字符写入到输出流 - void close() throws IOException
关闭流释放内存资源 - void flush() throws IOException
将输出流中缓冲的数据全部写出到目的地