IO File类

IO File类

概述

I:Input输入,指向内存导入数据
O:Output 输出,指从内存写入数据
流是对数据传输的总称,也就是两台设备之间进行数据传输,称为流,根据流传输的特性抽象为各个类

分类

按处理数据类型的不同,分为字节流和字符流
按数据流向的不同,分为输入流和输出流。(入和出是相对于内存来讲的) 

在这里插入图片描述

按功能不同,分为节点流和处理流
节点流:直接操作数据源
处理流:对其他流进行处理

抽象类定义

在这里插入图片描述

InputStream

在这里插入图片描述

蓝色为节点流,
黑色为处理流

常用方法
void close() 关闭此输入流并释放与该流关联的所有系统资源
abstract int read() 从输入流读取下一个数据字节
int read(byte[] b) 从输入流中读取一定数量的字节并将其存储在缓冲区数组b中
int read(byte[] b, int off, int len)将输入流中最多len个数据字节读入字节数组

OutputStream

在这里插入图片描述

常用方法
void close() 关闭此输出流并释放与此流有关的所有系统资源
void flush() 刷新此输出流并强制写出所有缓冲的输出字节
void write(byte[] b) 将 b.length个字节从指定的字节数组写入此输出流
void write(byte[] b, int off, int len) 将指定字节数组中从偏移量 off 开始的 len 个字节写入此输出流
abstract void write(int b) 将指定的字节写入此输出流

Reader

在这里插入图片描述

常用方法
abstract void close() 关闭该流
int read() 读取单个字符
int read(char[] cbuf)将字符读入数组
abstract int read(char[] cbuf, int off, int len) 将字符读入数组的某一部分

Writer

在这里插入图片描述

常用方法
void write(int c) 写入单个字符
void write(char[] cbuf) 写入字符数组
abstract void write(char[] cbuf, int off, int len) 写入字符数组的某一部分
void write(String str) 写入字符串
void write(String str, int off, int len) 写入字符串的某一部分
Writer append(char c) 将指定字符添加到此writer
abstract void flush() 刷新该流的缓冲
abstract void close() 关闭此流,但要先刷新它

常用流

文件流

分类 字节流 字符流
文件输入流 FileInputStream FileReader
文件输出流 FileOutputStream FileWriter

FileInputStream
:字节输入流
字节流能处理所有类型的数据(如图片、avi等)
绝对定位:以当前文件系统根目录为基准
例如:D://a.java
相对定位:当前文件目录为基准./,…/…/…/
注意,eclipse相对目录./是当前项目下

public class IO_01_FileInputStream_01 {
   
	public static void main(String[] args) throws IOException {
   
		// 文件要读取,必须先找到这个文件
		// 怎么找到 : 1 绝对定位 2 相对定位
		// 绝对定位 : 以当前文件系统的根目录为基准
		// 相对路径 : 以当前文件所在目录为标准 ./ , ../ , ../../ , ../../../
		// 注意 !!! eclipse中,相对目录 是当前项目下 ./
		FileInputStream fis = new FileInputStream("D://a.java");
		// 读取 : 默认一次读取一个字节,并且返回值是下一个字节的值,到达文件末尾,返回-1
		// int i1 = fis.read();
		// int i2 = fis.read();
		// int i3 = fis.read();
		// int i4 = fis.read();
		// int i5 = fis.read();
		// System.out.println((char)i1);
		// System.out.println((char)i2);
		// System.out.println((char)i3);
		// System.out.println((char)i4);
		// System.out.println((char)i5);
		
		// 循环读取
		int temp = -1;
		while( (temp = fis.read()) != -1 ){
   
			System.out.print((char)temp);
		}
	}
}
public class IO_02_FileInputStream_02 {
   
	public static void main(String[] args) {
   
		FileInputStream fis = null;
		try {
   
			fis = new FileInputStream("D://a.java");
			// 循环读取
			int temp = -1;
			while ((temp = fis.read()) != -1) {
   
				System.out.print((char) temp);
			}
		} catch (IOException e) {
   
			e.printStackTrace();
		} finally {
   
			try {
   
				if (fis != null) {
   
					fis.close();
				}
			} catch (IOException e) {
   
				e.printStackTrace();
			}
		}

		// 1.7之后 自动关闭资源
		try (FileInputStream fis1 = new FileInputStream("D://a.java");) {
   
			// 循环读取
			int temp = -1;
			while ((temp = fis1.read()) != -1) {
   
				System.out.print((char) temp);
			}
		} catch (Exception e) {
   
			e.printStackTrace();
		}
	}
}

read : 方法重载,可以传入一个字节数组,把数据放到数组中,
返回当前次,读取的字节个数,如果到达文件末尾 返回 -1

public class IO_03_FileInputStream_03 {
   
	public static void main(String[] args) {
   
		try (FileInputStream fis1 = new FileInputStream("D://a.java");) {
   
			// 循环读取
			byte[] bytes = new byte[10];
			int temp = 0;
			while ((temp = fis1.read(bytes)) != -1) {
   
				// temp = fis1.read(bytes) ;
				// if (temp == -1) {
   
				// break;
				// }
				// 每次读取之后,数组不会清空,再读的时候,用读到的数据,替换原来的数据
				// 如果最后一次读了两个数据,就读完了,那么数组中还有一部分冗余数据
				// System.out.print ( new String(bytes));
				// 从0开始,到temp结束解决上面的问题
				System.out.print(new 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值