输入输出处理 上
第九章 输入输出处理
9.1 I/O流的概念和划分
9.1.1数据流是一组有顺序的、有起点和终点的字节集合,是对输入和输出的总称和抽象。一般地,数据流分为输入流(InputStream)和输出流(OutputStream).输入流只能读,不能写,而输出流只能写不能读
9.1.2 Java流的划分
Java2定义了两种流:字节流和字符流。字节流为处理字节的输入和输出提供了方便的方法。字符流为字符的输入和输出处理提供了方便。它们采用了统一的编码标准,因而可以国际化。在某些场合,字符流比字节流更有效。需要说明的是,在最底层,所有的输入输出都是字节形式的。基于字符的流只为处理字符提供方便有效的方法。
字节流类:InputStream和OutputStream
字节输入流的描述
InputStream |
表示输入字节流的抽象类 |
FileInputStream |
文件字节输入流 |
ByteArrayInputStream |
字节数组输入流,把字节数组作为数据源 |
FilterInputStream |
过滤字节输入流,提供扩展功能的输入流 |
PipedInputStream |
管道输入流,可用于线程之间的通信 |
ObjectInputStream |
对象输入流 |
SequenceInputStream |
顺序输入流,把多个流顺序合并成一个流 |
AuiioInputStream |
音频输入流 |
BufferedInputStream |
缓冲输入流 |
CipherInputStram |
加密输入流 |
DataInputStream |
包含Java标准数据类型方法的输入流 |
DigesInputStream |
摘要数据流,在输入过程中,生成流的摘要 |
ProgressMonitorInputStream |
过程监视数据流 |
PushbackInputStream |
能够向输入流退回一个字节的输入流 |
字节输出流的描述和字节输入流的几乎是相对应的 在这里就不在描述
字符流类:Reader和Writer。这些抽象类处理统一编码的字符流
字符输入流的描述
Reader |
表示字符输入流的抽象类 |
BufferedReader |
带缓冲功能的字符的抽象类 |
CharArrayReader |
把字符数组作为输入源的输入流 |
InputStreamReader |
字节楼向字符流转换流 |
PipedReader |
管道字符输入流 |
StringReader |
把字符串作为输入源的输入流 |
LineNumberReader |
能够统计行数的输入流 |
PushbackReader |
能够向输入流退回一个字符的输入流 |
FileReader |
文件字符输入流 |
9.2文件的操作
9.2.1File类
在进行文件操作时,需要知道一些关于文件的信息。File类提供了一些方法来操纵文件和获取文件信息。
File类提供的方法
Boolean canRead() |
文件是否可读 |
Boolean canWriter |
文件是否可写 |
Int compareTo(File pathname) |
比较两个文件的名称 |
Boolean createNewFile() |
创建文件 |
Static File createTemFile(String prefix,String suffix) |
在默认的临时文件目录创建一些空文件 |
Boolean detete() |
删除文件 |
Void deleteOnExit() |
在Java虚拟机终止时删除与调用对象相关的文件 |
Boolean equals(Object obj) |
比较两个文件对象 |
Boolean exists() |
测试文件是否存在 |
File getAbsoluteFile() |
返回绝对文件名 |
String getAbsolutePath() |
返回绝对路径 |
String getCanonicalPath() |
返回规范的路径字符串 |
String getName() |
返回文件名 |
String getParent() |
返回父目录 |
String getPath() |
返回路径 |
Boolean isAbsolute() |
是否是绝对路径 |
Boolean isDirectory() |
是否为目录 |
Boolean isFile() |
是否为文件 |
Boolean isHidden() |
是否隐藏文件 |
Long lastModified() |
上次修改的时间 |
Long length() |
文件长度 |
String []list() |
列出目录中的文件 |
String []list(FilenameFilter filter) |
使用过滤器列出目录中的文件 |
Boolean mkdir() |
创建目录 |
Boolean mkdirs() |
创建多层目录 |
Boolean renameTo(File dest) |
重命名文件 |
Boolean setReandOnly() |
设置只读 |
String toString() |
把文件对象转化成字符串 |
URI toURI() |
把文件对象转化成URI对象 |
URL toURL() |
把文件对象转化成URL对象 |
9.2.2目录
目录是一个包含其他文件和路径类表的File类。当创建一个File对象且它是目录时,则isDirectory()方法返回true。在这种情况下,可以调用该对象的list()方法来提取该目录内部其他文件和目录的列表。该方法有两种形式。
第一种形式:String[] list() 文件名列表在一个String对象的数组中返回
第二种形式:File[]listFiles() 文件对象列表在一个File对象的数组中返回
9.3字节流处理
InputStream 的方法
方法 |
描述 |
Int available() |
返回当前可读的输入字节数 |
Void close() |
关闭输入源,关闭之后的读取会产生IOException |
Void mark(int readlimit) |
在输入流当前点放置一个标记。该流在读取readlimit个字节之前都有效 |
Boolean markSupported() |
如果调用的流支持mark()/reset() 就返回true |
Int read() |
如果下一个字节可读则返回一个整型,遇到文件尾返回-1 |
Int read(byte b[]) |
试图读取b.length个字节到b中,并返回实际成功读取的字节数。遇到文件尾返回-1 |
Int read(byte b[],int offset,int len) |
试图读取len个字节到b中,从offert开始存放,并返回实际成功读取的字节数。遇到文件尾返回-1 |
Void reset() |
重新设置输入指针到先前设置的标志处 |
Long skip(long n) |
跳过n个输入字节,返回实际跳过的字节数 |
OutputStream的方法
方法 |
描述 |
Void close() |
关闭输出流。关闭后的写操作会产生IOException异常 |
Void flush() |
刷新输出缓冲区 |
Void write(int b) |
向输出流写入单个字节,注意参数是个整型,它允许不必把参数转换成字节型就可以调用write(),但是输出的有效值为b的低8位,高24位被舍弃 |
Void write(byte b[]) |
向一个输出流写一个完整的字节数组 |
Void write(byte b[],int offset,int len) |
输出数组b以b[offset]为起点的len个字节区域内的内容 |
9.3.2 标准输入输出流
标准输入:stdin 对象时键盘
标准输出:stdout 对象是屏幕
标准错误输出stderr 对象是屏幕
public class StdInput {
public static void main(String[] args) throws IOException {
System.out.println("input");
byte b[] = new byte[512];
int count = System.in.read(b);
System.out.println("Output");
for (int i = 0; i < count; i++) {
System.out.print(b[i] + " ");
}
System.out.println();
for (int i = 0; i < count; i++) {
System.out.print(b[i] + " ");
}
System.out.println("count= " + count);
}
}
9.3.3 文件字节流
InputStream和OutputStream 都是抽象类不能实例化,因此在实际的应用中都使用的是它们的子类,这些子类在实现其超类方法的同时又定义了特有的功能,用于不同的场合。
FileInputStream 用于顺序访问本地文件,从超类继承read、close方法,对文件进行操作。
FileOutputStream 用于向一个本地文件写数据。它从超类继承write和close方法。
Boolean canRead() |
文件是否可读 |
Boolean canWriter |
文件是否可写 |
Int compareTo(File pathname) |
比较两个文件的名称 |
Boolean createNewFile() |
创建文件 |
Static File createTemFile(String prefix,String suffix) |
在默认的临时文件目录创建一些空文件 |
Boolean detete() |
删除文件 |
Void deleteOnExit() |
在Java虚拟机终止时删除与调用对象相关的文件 |
Boolean equals(Object obj) |
比较两个文件对象 |
Boolean exists() |
测试文件是否存在 |
File getAbsoluteFile() |
返回绝对文件名 |
String getAbsolutePath() |
返回绝对路径 |
String getCanonicalPath() |
返回规范的路径字符串 |
String getName() |
返回文件名 |
String getParent() |
返回父目录 |
String getPath() |
返回路径 |
Boolean isAbsolute() |
是否是绝对路径 |
Boolean isDirectory() |
是否为目录 |
Boolean isFile() |
是否为文件 |
Boolean isHidden() |
是否隐藏文件 |
Long lastModified() |
上次修改的时间 |
Long length() |
文件长度 |
String []list() |
列出目录中的文件 |
String []list(FilenameFilter filter) |
使用过滤器列出目录中的文件 |
Boolean mkdir() |
创建目录 |
Boolean mkdirs() |
创建多层目录 |
Boolean renameTo(File dest) |
重命名文件 |
Boolean setReandOnly() |
设置只读 |
String toString() |
把文件对象转化成字符串 |
URI toURI() |
把文件对象转化成URI对象 |
URL toURL() |
把文件对象转化成URL对象 |