文章目录
Java-IO流(一)
java的IO通过java.io包下的类和接口来支持,在该包下主要有输入、输出两种IO流,每种输出、输入流又可分为字节流和字符流。此外,Java的IO流使用了一种装饰器设计模式,将IO流分成底层节点流和上层处理流,其中节点流用于和物理储存节点直接关联,不同物理节点获取节点流的方式可能有差异,但程序可以把不同物理节点流包装成统一的处理流,从而允许程序使用统一的输入输出代码来读取不同的物理存储节点的资源。java.nio及其子包提供了一系列API,是对原IO的升级。
File类
访问文件和目录
File类是java.io包下代表与平台无关的文件和目录,也就是说它并不能访问文件,需要时使用IO流。File可以使用文件路径字符串来创建File实例,通过调用实例方法来访问,如下:
访问文件名相关
- String getName():返回此
File对象所表示的文件名或路径名。 - String
getPath():返回此File对象所对应的路径名。 - File
getAbsoluteFile():返回此File对象的绝对路径。 - String
getAbsolutePath():返回File对象对应的绝对路径名。 - String
getParent():返回File对象对应目录的父目录名。 - boolean
renameTo(File newName):重命名文件或目录,成功返回true。
还有文件检测方法、获取常规文件、文件操作相关和目录操作相关的方法等。注意文件路径用斜杠/表示!
文件过滤器
在File类的list()方法中可以接收一个FilenameFilter参数,通过该参数可以列出符合条件的文件,这里的FilenameFilter接口和javax.swing.filechooser包下的FileFilter抽象类的功能非常相似,可以把FileFilter当成FilenameFilter实现类,但实际上没有实现该接口。
FilenameFilter接口包含一个accept(File dir,String name)方法,该方法对File所指定的目录或文件进行迭代,如果返回true,则list()方法会列出该子目录或文件。FilenameFilter接口内只有一个抽象方法,因此该接口也是一个函数式接口,则可使用Lambda表达式创建该接口对象。
File file = new File(".");
String[] nameList = file.list( (dir,name)->name.endsWith(".java")||new File(name).isDirectory());
Java的IO流
Java输入/输出源抽象表述为“流”stream,然后通过流的方法访问不同的输入/输出源。stream是从起源到接收sink的有序数据。所有的传统流的类都在java.io包下,以实现输入/输出功能。
1.输入输出流
- 输入流:只能从中读取数据,而不能写入数据
- 输出流:只能向其写入数据,不能读数据。
Java的输入流主要由InputStream和Reader作为基类,输出流由OutputStream和Writer作为基类。
2.字节流和字符流
两者区别在于所操作的数据单元不同,字节流操作的数据单元是8位字节,而字符是16位的字符。字节流主要由InputStream和OutputStream作为基类,字符流由Reader和Writer作为基类。
3.节点流和处理流
可以向一个特定的IO设备读写数据的流称为节点流low level stream;处理流则对一个已存在的流进行连接或封装,通过封装后的流来实现数据读写功能,不会连接到实际的数据源,同时它被称作高级流。Java使用处理流来包装节点流是一种典型的装饰器设计模式,通过来包装不同的节点流来消除节点间的差异,以通过更多方法完成输入输出,也叫包装流。
IO流涉及40多个类,这些类非常有规则,它们都是从以下4个抽象基类派生而成。
IuputStream/Reader:所有输入流的基类,前者是字节输入流,后者是字符输入流。
OutputStream/Writer:所有输出流的基类,前者是字节输出流,后者是字符输出流。
此外,处理流的功能体现在以下两个方面:
- 性能提高:增加缓冲的方式提高IO效率。
- 操作便捷:处理流提供大量方法输入输出大批内容。
字节流和字符流
InputStream和Reader
InputStream包含如下三个方法:
int read():从输入流读取单个字节,并返回数据int read(byte[] b):从输入流中最多读取b.length个字节并存储在数组中,返回实际读取的字节数。int read(byte[] b,int off,int len):从off开始读,最多读取len个字节数据,放入b中,返回实际读取字节。
Reader也有三个类似方法,但是读取字符数据。最后要显式关闭IO流,回收资源。
OutputStream和Writer
void writer(int c):将指定字节/字符输出到输出流中,c可以是字节或字符。void writer(byte[]/char[] buf):将字节或字符数据输出到指定输出流中void writer(byte[]/char[] buf,int off,int len):从off开始,将长度为len的数据输出到输出流。
Writer还包含void writer(String str),void writer(String str,int off,int len)方法,用字符串代替字符数组。
本文主要介绍Java-IO流和File类。Java的IO流分为输入输出流、字节流和字符流、节点流和处理流,采用装饰器设计模式。File类代表与平台无关的文件和目录,可通过实例方法访问文件和目录,还介绍了文件过滤器。最后说明了IO流的操作方法及关闭流回收资源。

1096

被折叠的 条评论
为什么被折叠?



