1. FileWriter文件操作输出字符流
一种用于向文件中执行写操作的字符流
构造方法:
FileWriter(File file);
根据File类对象创建对应文件的文件操作输出字符流
FileWriter(String pathName);
根据String类型文件路径创建对应文件的文件操作输出字符流
FileWriter(File file, boolean append);
根据File类对象创建对应文件的文件操作输出字符流,并要求为追加写
FileWriter(String pathName, boolean append);
根据String类型文件路径创建对应文件的文件操作输出字符流,并要求为追加写
前两种构造方法是直接往文件中添加内容,会把原有内容删除之后再进行删除。后两种是追加。
成员方法:
FileWriter(File file);
根据File类对象创建对应文件的文件操作输出字符流
FileWriter(String pathName);
根据String类型文件路径创建对应文件的文件操作输出字符流
FileWriter(File file, boolean append);
根据File类对象创建对应文件的文件操作输出字符流,并要求为追加写
FileWriter(String pathName, boolean append);
根据String类型文件路径创建对应文件的文件操作输出字符流,并要求为追加写
字符流文件拷贝
public static void main(String[] args) {
FileReader fileReader = null;
FileWriter fileWriter = null;
try {
fileReader = new FileReader(new File("D:/aaa/logo桌面.jpg"));
fileWriter = new FileWriter(new File("D:/aaa/temp.jpg"));
char[] buf = new char[1024 * 4];
int length = -1;
while ((length = fileReader.read(buf)) != -1) {
fileWriter.write(buf, 0, length);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (fileWriter != null) {
try {
fileWriter.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (fileReader != null) {
try {
fileReader.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
首先,为一个文件对象创建了字符输入流以及输出流,之后定义了一个数组,数组的容量是8kb,用循环把读到的文件内容写进新文件中,这样,就完成了文件拷贝。但是由于编码集的问题,上述的代码并不能达到想要的结果。
2.缓冲流
无论是字节输入输出流还是字符的输入输出流,都需要考虑效率问题,而提高速度的一种方法就是建立缓冲流。
以上的每种io流都对应着一种缓冲流。
字节输入缓冲
BufferedInputStream
字节输出缓冲
BufferedOutputStream
字符输入缓冲
BufferedReader
字符输出缓冲
BufferedWrite
【重点】
所有的缓冲流都没有任何的读取,写入文件能力,这里都需要对应的输入流和输出流来提供对应的能力。
在创建缓冲流流对象时,需要传入对应的输入流对象和输出流对象。
底层就是提供了一个默认大小的缓冲数组,用于提高效率
字节缓冲流
输入
BufferedInputStream(InputStream in);
这里需要的对象是一个字节输入流基类对象。同时也可也传入InputStream子类对象
输出
BufferedOutputStream(OutputStream out);
这里需要的对象是一个字节输出流基类对象。同时也可也传入OutputStream子类对象
以上传入的InputStream和OutputStream都是用于提供对应文件的读写能力。
字符缓冲流
BufferedReader 字符缓冲输入流 BufferedReader(Reader reader); BufferedWriter
字符缓冲输出流 BufferedWriter(Writer writer);
对比之前,增加了两种方法:
字符缓冲输入流中
String readLine(); 读取一行数据
字符缓冲输出流中
void newLine(); 换行 (往文件中写的时候进行换行)
序列化
Java中提供了一种序列化操作的方式,用一个字节序列化来表示一个对象,该字节序列化中保存了【对象的属性】,【对象的类型】和【对象的数据】。把字节序列化保存到文件中,就可以做到持久化保存数据内容。
从文件中读取字节序列化数据,可以直接得到对应的对象。(反序列化)
ObjectOutputStream(OutputStream out);
输出字节流对象作为当前方法的参数
把输出字节流对象
objectOutputStream = new ObjectOutputStream(new FileOutputStream("D:/aaa/person.txt"));
// 序列化对象,并且写入到文件中
objectOutputStream.writeObject(new Person(1, "骚磊", 16));
把对象Person 序列化,之后写入了文件中。