java之IO系统

本文详细介绍了Java中的File类用于目录操作,展示了如何列出目录内容及其筛选,同时深入剖析了输入流(InputStream)和输出流(OutputStream)的概念,包括字节流和字符流的区别,以及常见的InputStream子类和其方法。此外,还提到了OutputStream的基本操作,如write(), flush(), 和 close()。
摘要由CSDN通过智能技术生成

File 类

在了解真正用于流中读写数据的类之前,我们来先认识一下一个实用类 — File.
File 可以代表一个特定文件的名字,也可以代表一个目录下的一组文件的名称。

目录列表器

如何查看一个目录列表?
1、调用不带参数的list()方法,此方法获得File对象包含的全部列表。
2、若想获得的是有限制的目录列表,则要用到目录过滤器
在这里插入图片描述

先知道有这个用法吧,代码解释待更新…

import java.io.*;
import java.util.Arrays;
import java.util.regex.Pattern;

public class DirList {
	public static void main (String [] args) {
		File path = new File(".");
		String [] list;
		if(args.length == 0)
			list = path.list();
		else
			list = path.list(new DirFilter(args[0]));
		Arrays.sort(list, String.CASE_INSENSITIVE_ORDER);
		for(String dirItem : list)
			System.out.println(dirItem);
	}
}
class DirFilter implements FilenameFilter {
	private Pattern pattern;
	public DirFilter (String regex) {
		pattern = Pattern.compile(regex);
	}
	public boolean accept(File dir,String name) {
		return pattern.matcher(name).matches();
	}
}

运行结果:

DirFilter.class
DirList.class
DirList.java

java输入与输出流

流的概念:

代表有能力产出数据的数据源对象或者是有能力接受数据的接收端对象。(读写数据的方法,文件和程序之间的一根管道(水管)。)
在这里插入图片描述

流的分类

io包里定义了多个流类型

按数据流的方向不同可以分为输入流和输出流(站在程序的角度上)
按照处理数据单位不同可以分为字节流(0、1代码,有8位)和字符流(按一个字符一个字符往外流,一个字符两个字节)。
按照功能不同可以分为节点流(管道直接连在数据源上)和处理流(连接在已存在的流上,即套在其他管道之上的流)。

java jdk 提供的所有流类型位于java.io内部。

InputStream类型

字节、输入流(向程序中输入数据,且数据单位为8位一字节)

InputStream的作用是用来表示那些从不同数据源产生输入的类。这些数据源包括:
(1) 字节数组
(2) String对象
(3) 文件
(4) “管道”,工作方式与现实生活中实际管道的工作方式相似,即从一端输入另一端输出
(5)一个由其他种类的流组成的序列。
(6) 其他数据源,如Internet 连接等
每一种数据源都有相应的InputStream子类。
除此以外,FilterInputStream也属于 InputStream的一种类型,用它可为“破坏器”类提供一个基础类,以便将属性或者有用的接口同输入流连接到一起。

在这里插入图片描述
一些基本方法
1、public abstract int read()
throws IOException

从输入流读取数据的下一个字节。 值字节被返回作为int范围0至255 。 如果没有字节可用,因为已经到达流的末尾,则返回值-1 。 该方法阻塞直到输入数据可用,检测到流的结尾,或抛出异常。
一个子类必须提供这个方法的一个实现。

结果显示为:
数据的下一个字节,如果达到流的末尾, -1 。

2**、public int read(byte[] b)
throws IOException**

从输入流读取一些字节数,并将它们存储到缓冲区b 。 实际读取的字节数作为整数返回。 该方法阻塞直到输入数据可用,检测到文件结束或抛出异常。
如果b的长度为零,则不会读取字节并返回0 ; 否则,尝试读取至少一个字节。 如果没有字节可用,因为流在文件末尾,则返回值-1 ; 否则,读取至少一个字节并存储到b 。

第一个字节读取存储在元素b[0] ,下一个字节存入b[1]等等。 读取的字节数最多等于b的长度。 令k为实际读取的字节数; 这些字节将存储在元素b[0]至b[ k -1] ,使元素b[ k ]至b[b.length-1]不受影响。

该read(b)用于类方法InputStream具有相同的效果为:
read(b, 0, b.length) 参数
b - 读取数据的缓冲区。

结果显示为:
读取到缓冲区的总字节数,或者如果没有更多的数据,因为已经到达流的末尾,则是 -1 。

3、public int read( byte[] b, int off, int len) throws IOException

从输入流读取len字节的数据到一个字节数组。 尝试读取多达len个字节,但可以读取较小的数字。 实际读取的字节数作为整数返回。
该方法阻塞直到输入数据可用,检测到文件结束或抛出异常。

如果len为零,则不会读取字节并返回0 ; 否则,尝试读取至少一个字节。 如果没有字节可用,因为流是文件的-1则返回值-1 ; 否则,读取至少一个字节并存储到b 。

第一个字节读取存储在元素b[off] ,下一个字节存入b[off+1] ,等等。 读取的字节数最多等于len 。 令k为实际读取的字节数; 这些字节将存储在元素b[off]至b[off+ k -1] ,使元素b[off+ k ]至b[off+len-1]不受影响。

在每种情况下,元件b[0]至b[off]和元件b[off+len]至b[b.length-1]不受影响。

该read(b, off, len)类方法InputStream简单地调用该方法read()反复。 如果第一个这样的呼叫产生一个IOException ,那个异常从呼叫返回到read(b, off, len)方法。 如果任何后续调用read()导致IOException ,则异常被捕获并被视为文件的结尾; 读取到该点的字节被存储到b ,并且返回异常发生前读取的字节数。 该方法的默认实现将阻塞,直到所请求的输入数据len已被读取,文件结束被检测到或异常被抛出为止。 鼓励子类提供更有效的方法实现。

参数
b - 读取数据的缓冲区。
off - 写入数据的数组 b中的起始偏移量。
len - 要读取的最大字节数。

结果显示为:
读取到缓冲区的总字节数,如果没有更多的数据,因为已经到达流的末尾,那么 -1 。

4、public long skip(long n)
throws IOException

跳过并丢弃来自此输入流的n字节数据。 由于各种原因, skip方法可能会跳过一些较小数量的字节,可能是0 。 这可能是由许多条件中的任何一个引起的 n字节之前已经跳过的文件到达结束只有一种可能。 返回实际跳过的字节数。 如果n是否定的,则skip类方法InputStream总是返回0,并且没有字节被跳过。 子类可以不同地处理负值。
skip方法创建一个字节数组,然后重复读入它,直到已读取n个字节或已达到流的结尾。 鼓励子类提供更有效的方法实现。 例如,实施可能取决于寻求的能力。

参数
n - 要跳过的字节数。
结果
实际跳过的字节数。

5、public void close()
throws IOException

关闭此输入流并释放与流相关联的任何系统资源。
该close的方法InputStream什么都不做。

OutputStream类型

输出、字节流

该类别的类决定了输出所要去往的目标:字节数组、文件、或管道
除此之外,FilterOutputSream为“装饰器”类提供了一个基类,“装饰器”类把属性或者有用的接口与输出流连接在一起。
在这里插入图片描述
一些基本方法

1、public void write(byte[] b)
throws IOException

将b.length字节从指定的字节数组写入此输出流。 write(b)的一般合约是应该具有与电话write(b, 0, b.length)完全相同的效果。
参数
b - 数据。

2、public void flush()
throws IOException

刷新此输出流并强制任何缓冲的输出字节被写出。 flush的一般合同是,呼叫它表明,如果先前写入的任何字节已经通过输出流的实现进行缓冲,则这些字节应该立即被写入到它们的预定目的地。
如果此流的预期目标是由底层操作系统(例如文件)提供的抽象,那么刷新流仅保证先前写入流的字节传递到操作系统进行写入; 它并不保证它们实际上被写入物理设备,如磁盘驱动器。

该flush的方法OutputStream什么都不做。

3、public void close()
throws IOException
关闭此输出流并释放与此流相关联的任何系统资源。 close的一般合同是关闭输出流。 封闭流不能执行输出操作,无法重新打开。
该close的方法OutputStream什么都不做。

注:一般close之前先调用一下flush。

Reader

输入、字符流。
继承自Reader的流;都是用于向程序中输入数据,且数据的单位为字符(16bit两个字节)

Writer

输出、字符流

待更新…
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值