字节流写出
OutputStream抽象类
概念
此抽象类是表示输出字节流的所有类的超类。输出流接受输出字节并将这些字节发送到某个接收器。
需要定义OutputStream
子类的应用OutputStream
必须至少提供一个写入一个字节输出的方法。
常用方法
方法 | 解释 |
---|---|
void close() | 关闭此输出流并释放与此流相关联的任何系统资源。 |
void flush() | 刷新此输出流并强制任何缓冲的输出字节被写出。 |
void write(byte[] b) | 将 b.length字节从指定的字节数组写入此输出流。 |
void write(byte[] b, int off, int len) | 从指定的字节数组写入 len个字节,从偏移 off开始输出到此输出流。 |
abstract void write(int b) | 将指定的字节写入此输出流。 |
FileOutputStream子类
概念
文件输出流是用于将数据写入到输出流File
或一个FileDescriptor
。 文件是否可用或可能被创建取决于底层平台。
创建对象
构造方法 | 解释 |
---|---|
FileOutputStream(File file) | 创建文件输出流以写入由指定的 File 对象表示的文件。 |
FileOutputStream(File file, boolean append) | 创建文件输出流以写入由指定的 File 对象表示的文件。 |
FileOutputStream(FileDescriptor fdObj) | 创建文件输出流以写入指定的文件描述符,表示与文件系统中实际文件的现有连接。 |
FileOutputStream(String name) | 创建文件输出流以指定的名称写入文件。 |
FileOutputStream(String name, boolean append)` | 创建文件输出流以指定的名称写入文件。 |
常用方法
方法名 | 解释 |
---|---|
void close() | 关闭此文件输出流并释放与此流相关联的任何系统资源。 |
protected void finalize() | 清理与文件的连接,并确保当没有更多的引用此流时,将调用此文件输出流的 close 方法。 |
void write(byte[] b) | 将 b.length 个字节从指定的字节数组写入此文件输出流。 |
void write(byte[] b, int off, int len) | 将 len 字节从位于偏移量 off 的指定字节数组写入此文件输出流。 ` |
void write(int b) | 将指定的字节写入此文件输出流。 |
BufferedOutputStream子类
概念
该类实现缓冲输出流。 通过设置这样的输出流,应用程序可以向底层输出流写入字节,而不必为写入的每个字节导致底层系统的调用。
创建对象
构造方法 | 解释 |
---|---|
BufferedOutputStream(OutputStream out) | 创建一个新的缓冲输出流,以将数据写入指定的底层输出流 |
BufferedOutputStream(OutputStream out, int size) | 创建一个新的缓冲输出流,以便以指定的缓冲区大小将数据写入指定的底层输出流。 |
常用方法
方法 | 解释 |
---|---|
void flush() | 刷新缓冲输出流。 |
void write(byte[] b, int off, int len) | 从指定的字节数组写入 len个字节,从偏移 off开始到缓冲的输出流。 |
void write(int b) | 将指定的字节写入缓冲的输出流。 |
测试代码:
//这个类用来测试 字节流写出
//总结:
//1、执行效率上:BufferedOutputStream > FileOutputStream
//2、原因是:底层维护了一个byte[] ,可以按照数组的长度一次性的向磁盘中写出一大批数据。默认的容量是8192字节量,也就是8K。
public class Test3_Out {
public static void main(String[] args) {
// method();//普通的写出流FileOutputStream
method2();//高效的写出流BufferedOutputStream
}
public static void method2() {
try {
//1、创建对象
// OutputStream out = new BufferedOutputStream(
// new FileOutputStream("D:\iotest\1.txt"));//覆盖
OutputStream out = new BufferedOutputStream(
new FileOutputStream("D:\iotest\1.txt",true));//追加
//2、开始写出
out.write(48);
out.write(48);
out.write(48);
//3、释放资源
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void method() {
try {
//1、创建对象--默认是数据覆盖模式,也可以改成追加模式,需要传入第二参数true
OutputStream out = new FileOutputStream("D:\iotest\1.txt");
//默认覆盖
//2、开始写出
out.write(49);
out.write(50);
out.write(51);
//3、释放资源
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
字符流写出
Writer抽象类
概念
用于写入字符流的抽象类。
常用方法
方法 | 解释 |
---|---|
Writer append(char c) | 将指定的字符附加到此作者。 |
Writer append(CharSequence csq) | 将指定的字符序列附加到此作者。 |
Writer append(CharSequence csq, int start, int end) | 将指定字符序列的子序列附加到此作者。 |
abstract void close() | 关闭流,先刷新。 |
abstract void flush() | 刷新流。 |
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) | 写一个字符串的一部分。 |
FileWriter子类
概念
-
FileWriter是用于写入字符流。
-
方便课写字符文件。 该类的构造函数假定默认字符编码和默认字节缓冲区大小是可以接受的
构造方法
构造方法名 | 解释 |
---|---|
FileWriter(File file) | 给一个File对象构造一个FileWriter对象。 |
FileWriter(File file, boolean append) | 给一个File对象构造一个FileWriter对象。可追加 |
FileWriter(FileDescriptor fd) | 构造与文件描述符关联的FileWriter对象。构造与文件描述符关联的FileWriter对象。 |
FileWriter(String fileName) | 构造一个给定文件名的FileWriter对象 |
FileWriter(String fileName, boolean append) | 构造一个FileWriter对象,给出一个带有布尔值的文件名,表示是否附加写入的数据。 |
常用方法
方法 | 解释 |
---|---|
Writer append(char c) | 将指定的字符附加到此作者。 |
Writer append(CharSequence csq) | 将指定的字符序列附加到此作者。 |
Writer append(CharSequence csq, int start, int end) | 将指定字符序列的子序列附加到此作者。 |
abstract void close() | 关闭流,先刷新。 |
abstract void flush() | 刷新流。 |
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) | 写一个字符串的一部分。 |
BufferedWriter子类
概念
将文本写入字符输出流,缓冲字符,以提供单个字符,数组和字符串的高效写入。
可以指定缓冲区大小,或者可以接受默认大小。 默认值足够大,可用于大多数用途。
构造方法
构造方法 | 解释 |
---|---|
BufferedWriter(Writer out) | 创建使用默认大小的输出缓冲区的缓冲字符输出流。 |
BufferedWriter(Writer out, int sz) | 创建一个新的缓冲字符输出流,使用给定大小的输出缓冲区。 |
常用方法
方法名 | 解释 |
---|---|
void close() | 关闭流,先刷新。 |
void flush() | 刷新流。 |
void newLine() | 写一行行分隔符。 |
void write(char[] cbuf, int off, int len) | 写入字符数组的一部分。 |
void write(int c) | 写一个字符 |
void write(String s, int off, int len) | 写一个字符串的一部分。 |
测试代码:
//这个类用来测试 字符流写出
//总结:
//1、执行效率上:BufferedWriter > FileWriter
//2、原因是:底层维护了一个char[] ,可以按照数组的长度一次性的向磁盘中写出一大批数据。默认的容量是8192字节量,也就是8K。
public class Test4_Out2 {
public static void main(String[] args) {
// method(); //FileWriter写出
method2(); //BufferedWriter写出
}
public static void method2() {
try {
//1、创建对象
Writer out = new BufferedWriter(new FileWriter("D:\iotest\1.txt"));
//2、开始写出
out.write("hello");
//3、释放资源
// out.flush();//用来把缓冲区的数据刷到磁盘中做展示
out.close();//1、把数据刷出去 2、关闭资源
} catch (IOException e) {
e.printStackTrace();
}
}
public static void method() {
try {
//1、创建对象
// Writer out = new FileWriter("D:\iotest\1.txt") ;//覆盖
Writer out = new FileWriter("D:\iotest\1.txt",true) ;//追加
// Writer out2 = new FileWriter(new File("D:\iotest\1.txt")) ;
//2、开始写出
out.write(48);
out.write(48);
//3、释放资源
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
总结:
所有的buffer-xxx流都是高效的,底层都有对应的缓冲数组
能高效就不使用低效的
缓冲流中,如果没有关闭流的前提下,一定要flush(),不然数据刷不到磁盘中.若有关闭流的语句,则可省略不写