java输入与输出
java应用程序中,数据是以三种方式呈现的,分别是文件、屏幕(console)和套接字(socket)。java应用程序从这三种方式的来源读取数据时,所经过的流称为输入流。反之,当java程序输出数据到上面三种方式的目的地时,所经过的流称为输出串流。
根据传输文件大小又可将流分为byte为传输单位(8b)的字节流和以char为传输单位(16b)的字符流。
1. 字节流 Byte Streams
字节流最上层的抽象类分别是InputStream(输入)和OutputStream(输出),其他则是衍生于这两个类。这类是位导向的输入与输出,可以读取或写入二进制(Binary)文件。除了一般文本文件也可以用于在读取或写入图片文件、声音文件、影片文件。
1、FileInputStream类:
FileInputStream是一个输入流,主要是以byte方式读取文件数据,例如,可以读取图像、声音或影片文件。虽然也可以使用这个方法读取字符(char,这是16b),不过建议如果读取字符数据可以使用FileReader。
构造方法如下:
FileInputStream(String name): 建立name名称的FileInputStream类对象。
常用方法如下:
int available(): 返回估计有多少bytes的数据可从输入流读取。
int read(): 从输入流读取1个byte数据。
int read(byte[] b): 从输入流读取数据,存储至b数组。
void close(): 关闭文件输入流,用在执行完read()后。
2、BufferedInputStream类:
使用BufferedInputStream类的read()方法读取数据时,并不是读取来源的数据,实际是读取输入缓冲区流的数据,当缓冲区的数据不足时,此类才会从输入流提取数据给read()。每次缓冲区数据被读取或被跳过后,缓冲区会自动从输入流中填充数据。
构造方法如下:
BufferedInputStream(InputStream obj): 建立输入流的缓冲区。
BufferedInputStream(InputStream obj, int size): 建立size大小的输出流的缓冲区,默认是2048B。
常用方法如下:
void write(int b): 读取输入缓冲区流的第1个byte数据。
void write(byte[] b, int off, int len): 读取输入缓冲区流b数组off位置len长度的数据。
void close(): 关闭输入流以及释放相关系统资源。
------------------------------------------------------------||----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1、FileOutputStream类:
FileOutputStream是一个输入流,主要是将byte数据输入到文件。虽然也可以使用这个方法执行字符(char,这是16b)的输出,不过建议如果输出字符数据可以使用FileWriter。
构造方法如下:
FileOutputStream(String name): 建立指定名称的输出流文件对象,未来数据将写入此文件内。
FileOutputStream(String name, Boolean a): 与上述相同,但是若a是true,会将输出数据附加在原文件后面。
常用的方法如下:
void write(int b): 将byte数据输出到文件流。
void write(byte[] ary): 将数组ary输出到文件流。
void close(): 关闭文件输出流,用在执行完write()后。
2、BufferedInputStream类:
使用BufferedOutputStream类的write()方法时,数据实际是写入输出缓冲区,缓冲区已满时,才将数据写入目的地,所以要将数据写入目的地需要在增加flush()方法。
构造方法如下:
BufferedOutputStream(OutputStream obj): 建立输出流的缓冲区。
BufferedOutputStream(OutputStream obj, int size): 建立size大小的输出流的缓冲区,默认是512B。
如果更完整的解释,可以将构造方法用下列方法表示:
BufferedOutputStream buf = new BufferedOutputStream(new FileOutputStream(name));
通常用两行表示:
FileOutputStream fos = new FileOutputStream("XX.txt");
BufferedOutputStream bos = new BufferedOutputStream(fos);
常用方法如下:
void newLine(): 加入行分隔符。
void write(int b): 将byte数据输出到缓冲区流。
void write(byte[] b, int off, int len): 将b数组off位置len长度的数据输出到缓冲区流。
void flush(): 将缓冲区流数据写入目的地。
void close(): 关闭缓冲流。
2. 字符流 Character Stream
字符流最上层的抽象类分别是Reader(输入)和Writer(输出),这两个最顶层的类其衍生类数量较少,不过大部分的方法用法和字节流的各子类方法类似。这类是字符char为导向的输入与输出,可以读一般文本文件。
1、FileWriter类
构造方法:
FileWriter(String file): 使用file字符串名称建立一个文件对象。
FileWriter(String file, boolean a): 使用file字符串名称建立一个文件对象,如果a是true则可将数据附在文件后面。
下面是常用方法:
void writer(String str): 输出字符串到文件对象。
void writer(char c): 输出字符到文件对象。
void writer(char[] c): 输出字符数组到文件对象。
void flush(): 强制将流数据输出。
void close(): 关闭文件对象。
2、BufferedWriter类
BufferedWriter主要是提供缓冲区让输出执行效率更高,继承Writer类,在处理characters导向的字符输出时,特别适合用于数组、字符、字符串的输出。
它的构造方法如下:
BufferedWriter(Writer wrt): 使用默认空间建立输出字符缓冲区流。
BufferedWriter(Writer wrt, int size): 使用size空间建立输出字符缓冲区流。
常用方法如下:
void nextLine(): 加入行分隔符。
void write(int b): 将byte数据输出到缓冲区流。
void write(char[] b,int off, int len): 将b数组off位置len长度的数据输出到缓冲区流。
void write(String s, int off, int len): 将b字符串off位置len长度的数据输出到缓冲区流。
void flush(): 将缓冲区流数据写入目的地。
void close(): 先flush()再关闭缓冲流。
1、FileReader类
构造方法:
FileReader(String file): 使用file字符串名称建立一个文件对象。
下面是常用方法:
int read(): 读取字符,如果返回值是-1表示读到文件末端。
void close(): 关闭文件流。
2、BufferedReader类
BufferedReader类继承了Reader类,主要是可以从输入流中读取字符导向的文件,甚至还可以使用readLine()方法读取整行数据。
它的构造方法如下:
BufferedReader(Reader rd): 使用默认空间建立输入字符缓冲区流。
BufferedReader(Reader rd, int size): 使用size空间建立输入字符缓冲区流。
常用方法如下:
int read(): 读取一个字符。
int read(char[] b, int off, int len): 读取len长度数据放到b数组off位置。
String readLine(): 读取整行数据。
void close()
3、System类
在java的System类内有三个针对屏幕的流是自动产生的。
System.out: 标准屏幕输出,是java.io.PrintStream类的衍生类。
System.in: 标准屏幕输入,是java.io.InputStream类的衍生类。
System.err: 系统错误时在屏幕输出错误信息,父类与System.out相同。
4、PrintStream类
其实这是我们最熟悉不过的类了,过去就是使用此类处理数据的输出,通过本节的讲述相信读者可以更进一步体会java的运行原理。虽然PrintStream类是衍生自byte导向的FilterOutputStream类,但是此类已经将数据包装成可以使用适当方式执行java基本类型数据的输出。PrintStream类另一个特点是它会自动执行强制将流数据输出,所以不用调用flush()方法,同时不用声明IOException。
它也可以将输出导向文件:
import java.io.*;
public class ch22_16 {
public static void main(String args[]) throws IOException {
FileOutputStream fo = new FileOutputStream("XX.txt");
PrintStream ps = new PrintStream(fo);
String str = "明天是国庆节";
ps.println(str);
ps.println("我要拿offer");
ps.println("秋招顺利");
ps.close();
fo.close();
System.out.println("输出成功!");
}
}
5、Console类
Console可以解释为控制面板,在设计程序时一般是指屏幕。
它的常用方法有:
Reader reader(): 选取与控制面板关联的阅读器对象。
String readLine(): 从屏幕上读取整行数据。
char[] readPassword(): 读密码,所输入密码不会在屏幕上显示。
char[] readPassword(String fmt, Object ··· args): 使用格式化方式读取密码。
Console format(String fmt, Object ··· args): 使用格式化方式输出数据。
Console printf(String fmt, Object ··· args): 使用格式化方式输出数据。
void flush(): 强制将流数据输出。