欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

9 IO流

程序员文章站 2022-07-14 11:11:09
...

IO流

概述

  1. 主要是把程序中的数据和磁盘里的数据进行交互。

  2. in:从磁盘里读取数据到程序里。

  3. out:从程序中写书数据到磁盘里。

  4. 分为字符流和字节流

    • 字符流:只能操作字符文件**.txt**。

    • 字节流:可以操作任何数据。

流的概念

数据的读写抽象成数据,在管道中流动。

  1. 流只能单方向流动。
  2. 输入流用来读取in
  3. 输出流用来写出out
  4. 数据只能从头到尾顺序的读写一次。

File文件流

概述

封装一个磁盘路径字符串,可以是文件路径、文件夹路径、不存在的路径。

创建对象

new File(String str)

常用方法

文件、文件夹属性

方法 用处
length() 文件的字节量
exists() 是否存在
ifFile() 是否为文件
isDirectory() 是否为文件夹
getName() 获取文件名、文件夹名
getParent() 获取父文件夹的路径
getAbsolutePath() 获取绝对路径

创建、删除

方法 用处
createNewFile() 新建文件,已经存在返回false
mkdirs() 新建多层不存在的文件夹
mkdir() 新建一个不存在的文件夹
delete() 删除文件、文件夹

文件夹列表

方法 用处
list() 返回String[] ,包含文件名
listFiles() 返回File[] ,包含文件对象
递归删除文件夹

	public static void main(String[] args) {
		File f = new File("D:\\TEDU\\Desktop\\Test");
		method1(f);
		System.out.println("success");	
	}

	private static void method1(File f) {
		File[] fs = f.listFiles();
		// 刪除文件
		for (int i = 0; i < fs.length; i++) {
			if (fs[i].isFile()) {
				fs[i].delete();
			} else if (fs[i].isDirectory()) {
				if (!fs[i].delete()) {
					method1(fs[i]);
				}
				fs[i].delete();
			}
		}
		
		f.delete();
	}

字节流

概述

专门用来读写 数据的,而且是各种类型 的数据. 被底层的一些工具类大量的使用.

继承结构
  1. 读取

    • InputStream – 父类是一个抽象类,不能new,只学习共性方法
      • FileInputStream – 子类学习怎么new,方法都是继承来的
      • BufferedInputStream – 子类学习怎么new,方法都是继承来的
  2. 写出

    • OutputStream – 父类是一个抽象类,不能new,只学习共性方法
      • FileOutputStream – 子类学习怎么new,方法都是继承来的
      • BufferedOutputStream – 子类学习怎么new,方法都是继承来的

字节流读取

InputStream父抽象类

​ 是一个抽象类,不能new,只学习共性方法

常用方法
abstract int read() 
//从输入流中读取数据的下一个字节。 

int read(byte[] b) 
//从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b 中。 

int read(byte[] b, int off, int len) 
//将输入流中最多 len 个数据字节读入 byte 数组从off开始。 

void close() 
//关闭此输入流并释放与该流关联的所有系统资源。 
FileInputStream子类
new FileInputStream(File f);
new FileInputStream(String path);
BufferedInputStream子类
  1. 缓冲流、处理流,目的是提高程序读取和写出的性能。
  2. 先将数据缓存到char[],然后一起读取出来(默认8192个字符写入一次)
new BufferedInputStream(InputStream in)//用普通输入流创建对象

字节流写出

OutputStream父抽象类

​ 是一个抽象类,不能new,只学习共性方法

常用方法
void close()
//刷出去+关闭此输出流并释放与此流有关的所有系统资源。

void flush()
//刷新此输出流并强制写出所有缓冲的输出字节。一般写在关闭前

void write(byte[] b)
//将 b.length 个字节从指定的 byte 数组写入此输出流。

void write(byte[] b, int off, int len)
//将指定 byte 数组中从 off 开始的 len 个字节写入此输出流。

abstract  void write(int b)
//将指定的字节写入此输出流。
FileOutputStream子类
new FileOutputStream(String path);
new FileOutputStream(File f[,boolean append]);//true--追加;false--覆盖
BufferedOutputStream子类

该类实现缓冲的输出流。通过设置这种输出流,应用程序就可以将各个字节写入底层输出流中,而不必针对每次字节写入调用底层系统。

new BufferedOutputStream(OutputStream out);

字符流读取

常用于txt文件

Reader抽象类
int read()
//读取单个字符。

int read(char[] cbuf)
//将字符读入数组。

abstract  int read(char[] cbuf, int off, int len)
//将字符读入数组的某一部分。

int read(CharBuffer target)
//试图将字符读入指定的字符缓冲区。

abstract  void close()
//关闭该流并释放与之关联的所有资源。
FileReader子类

用来读取字符文件的便捷类

FileReader(String fileName)
//在给定从中读取数据的文件名的情况下创建一个新 FileReader。

FileReader(File file)
//在给定从中读取数据的 File 的情况下创建一个新 FileReader。
InputStreamReader子类
  1. InputStreamReader 是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。
  2. 它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。
  3. 用来作为桥梁,把字节流转成字符流的桥梁。用来解决字符流读写乱码问题。
InputStreamReader(InputStream in ,String charsetName)
//String指定字符集

InputStreamReader(InputStream in)
//默认字符集
BufferedReader子类
  1. 从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。
  2. 可以指定缓冲区的大小,或者可使用默认的大小。
BufferedReader(Reader in)

字符流写出

writer抽象类
void write(char[] cbuf)
//写入字符数组。

abstract  void write(char[] cbuf, int off, int len)
//写入字符数组的某一部分。

void write(int c)
//写入单个字符。

void write(String str)
//写入字符串。

void write(String str, int off, int len)
//写入字符串的某一部分。

abstract  void close()
//关闭此流,但要先刷新它。
FileWriter子类
FileWriter(String fileName)
//根据给定的文件名构造一个 FileWriter 对象。

FileWriter(String fileName, boolean append)
//根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象。
OutputStreamWriter子类
  1. OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的 charset 将要写入流中的字符编码成字节。
  2. 它使用的字符集可以由名称指定或显式给定,否则将接受平台默认的字符集。
  3. 用来作为桥梁,把字节流转成字符流的桥梁。用来解决字符流读写乱码问题。
OutputStreamWriter(OutputStream out, String charsetName)
//创建使用指定字符集的 OutputStreamWriter。

 OutputStreamWriter(OutputStream out)
//创建使用默认字符编码的 OutputStreamWriter。
BufferedWriter子类

将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。

BufferedWriter(Writer out)
//创建一个使用默认大小输出缓冲区的缓冲字符输出流。
相关标签: javaSE基础 javase