Java学习 -- 流

小栗子

从磁盘中指定文件夹中读取文件

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 包中定义了多个流类型(类或抽象类)来实现输入/输出功能:可以从不同的角度对其进行分类
    1. 按数据流的方向不同可以分为输入流和输出流。
    2. 按处理数据单位不同可以分为字节流和字符流。
    3. 按功能不同可以分为节点流和处理流。
  • J2SDK 所提供的所有流类型位于包java.io内部分别继承自一下四种抽象流类型。
字节流字符流
输入流InputStreamReader
输出流OutputStreamWriter

节点流与处理流

在这里插入图片描述

必须掌握的知识

  • 什么叫流?
  • 流与类的关系
    1. 如果一个类是用作设备和程序之间的数据传输,则这个类有一个新的名字叫流
    2. 流一定是类,但类不一定是流
  • 原始流与包裹流的关系

四大基本抽象流

  • InputStream 和 OutputStream 读写数据的单位是一个字节
  • Reader 和 Writer 读写数据的单位是一个字符
  • 在java中一个字符占两个字节
  • InputStream 、OutputStream 、Reader 、Writer 都是抽象类,或者说都是抽象流,通常我们使用的都是它们的子类
  • 凡是以Stream结尾的都是字节流
InputStream 流中常用的方法
  • public int read() throws IOException
    1. 读取一个字节并以整数形式返回
    2. 如果读取到输入流的末尾返回-1
  • public int read(byte[] b) throws IOException
    1. 从输入流中读取一定数量的字节,并将其存储在缓冲区数组b中。以整数形式返回实际读取的字节数。
    2. 如果b的长度为0,则不读取任何字节并返回0,如果因为流位于文件末尾而没有可用的字节,则返回值-1;
    3. 比如:FileInputStream fis = new FileInputStream (“D:\share\errorlog.txt”);
    4. len = fis.read(buf); // 从fis流所关联的D:\share\errorlog.txt文件中读取数据,并将读取出来的数据写入buf数组中,返回值是实际写入buf数组的字节个数,如果读取到文件的结尾,则返回-1
  • public int read(byte[] b, int off, int len) throws IOException
    1. 从输入流中最多读取 len 个字节的数据并存入 byte 数组中
    2. b 表示读取的数据要存入的数组的名字
    3. off 表示第一个读出的数据要存入的位置,是下表
    4. len 表示最多能读取的字节数
    5. 将从输入流所关联到的设备中读取的第一个字节存储在元素 b[off]中,下一个字节存储在 b[off+1] 中,依次类推,读取的字节最多等于 len
    6. 尝试读取 len 个字节,但读取的字节也可能小于该值,以整数形式返回实际读取的字节数。
    7. 如果读到了文件的末尾,则返回-1
  • void close() throws IOException
    1. 关闭此输入流并释放与该流关联的所有系统资源
  • long skip(long n) throws IOException
  1. 跳过和丢弃此输入流中数据的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
    将输出流中缓冲的数据全部写出到目的地
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值