节点流(或文件流)实现操作文件
FileReader
字符输入流
FileReader
读入数据基本操作
//将file1.txt文件内容读入内存,并输出到控制台
@Test
public void test() {
FileReader fileReader = null;
try {
//实例化File类的对象,指明要操作的文件
File file = new File("file1.txt");
//提供具体的流
fileReader = new FileReader(file);
//数据的读入
int data = fileReader.read(); //read()方法返回读入的一个字符,如果到达文件末尾,则返回-1.
while (data != -1){
System.out.print((char) data);
data = fileReader.read();
}
}catch (IOException e){
e.printStackTrace();
}finally {
//流的关闭操作,为了保证流资源一定可以执行关闭操作,需要使用try-catch-finally来处理
try {
if(fileReader != null)
fileReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
FileReader
中使用read(char[] cbuf)
读入数据
@Test
public void test1() {
FileReader fileReader = null;
try {
//File类的实例化
File file = new File("file1.txt");
//FileReader流的实例化
fileReader = new FileReader(file);
//读入的操作
char[] cbuf = new char[5];
int len;
while ((len = fileReader.read(cbuf)) != -1){ //read(char[] cbuf)返回每次读入cbuf数组中的字符的个数,如果达到文件末尾,则返回-1.
for (int i = 0; i < len; i++) {
System.out.print(cbuf[i]);
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
//资源的关闭
if (fileReader != null)
{
try {
fileReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
FileWriter
字符输出流
FileWriter
写出数据的基本操作
@Test
public void test2() throws IOException {
//提供File类的对象,指明写出到的文件
File file = new File("file2.txt"); //输出操作如果对于的文件不存在,会自动创建文件
//如果流使用的构造器是:FileWriter(file,false) / FileWriter(file):对原文件的覆盖
//如果流使用的构造器是:FileWriter(file,true):不会对原文件覆盖,而是在原文件基础上追加内容
//提供FileWriter的对象,用于数据的写出
FileWriter fileWriter = new FileWriter(file);
//写出的操作
fileWriter.write("asdfghjkl\n");
fileWriter.write("aabbcc");
//流资源的关闭
fileWriter.close();
}
使用FileReader
和FileWriter
实现文件文件的复制
@Test
public void test3() {
FileReader fileReader = null;
FileWriter fileWriter = null;
try {
//创建File类的对象,指明读入和写出的文件
File srcFile = new File("file1.txt");
File destFile = new File("file3.txt");
//创建输入流和输出流的对象
fileReader = new FileReader(srcFile);
fileWriter = new FileWriter(destFile);
//数据的读入和写出
char[]cbuf = new char[5];
int len; //记录每次读入到数组cbuf中的字符的个数
while ((len = fileReader.read(cbuf)) != -1){
//每次西写出len个字符
fileWriter.write(cbuf,0,len);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
}
//关闭流资源
try {
if (fileReader != null)
fileWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
if (fileWriter != null)
fileReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
FileInputStream
/ FileOutputStream
输入输出字节流
- 对于文本文件(.txt,.java,.c,.cpp),使用字符流处理
- 对于非文本文件(.jpg,.mp3,.mp4,.avi,.doc,.ppt,…),使用字节流处理
实现对图片的复制操作
@Test
public void test(){
FileInputStream fileInputStream = null;
FileOutputStream fileOutputStream = null;
try {
File srcFile = new File("04.PNG");
File destFile = new File("05.PNG");
fileInputStream = new FileInputStream(srcFile);
fileOutputStream = new FileOutputStream(destFile);
byte[] buffer = new byte[5];
int len;
while ((len = fileInputStream.read(buffer)) != -1){
fileOutputStream.write(buffer,0,len);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (fileInputStream != null)
fileInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
if (fileOutputStream != null)
fileOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}