目标:理解掌握IO流
重点:
1.IO的英文全称为input(输入)、output(输出)
2.输入是指从磁盘输入到内存(读文件),输出是指从内存输出到磁盘(写文件)
3.IO流下面的结构图
4.字节流每次读取或者写入一个字节,而字符流每次读取或者写入一个字符(两个字节),通常字节流用来对图片、音频、视频等文件进行操作,而字符流用来对文本文件进行操作
5.节点流是处理流的基础,因为处理流的构造方法中需要一个其他流作为参数传递,例如
new BufferedReader(new FileReader(filePath));
6.处理流比节点流的效率更高
代码:
1.利用节点字节流对图片文件进行复制粘贴
package May.Ninth.IO;
/**
* 复制粘贴一个图片、音频、视频
*/
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class OthersFileCopy {
public static void main(String[] args) {
new OthersFileCopy().read("E:Javatest/1.jpg", "E:Javatest/1/2.jpg");
}
public void read(String path1, String path2) {
// 创建一个字节缓冲区域
byte[] bs = new byte[1024];
// 创建源文件对象
File file1 = new File(path1);
// 判断源文件是否存在
if (file1.exists()) {
// 创建一个目标文件对象
File file2 = new File(path2);
// 判断目标文件是否存在,不存在,则创建目标文件
if (!file2.exists()) {
try {
file2.createNewFile();
System.out.println("目标文件创建成功");
} catch (IOException e) {
e.printStackTrace();
}
} else {
System.out.println("目标文件已存在");
}
// 初始化字节输入流
FileInputStream fis = null;
// 初始化字节输出流
FileOutputStream fos = null;
try {
// 创建字节输入流
fis = new FileInputStream(file1);
// 创建字节输出流
fos = new FileOutputStream(file2);
// 循环读取数据,read()方法返回本次所读取的数据长度,当文件已经被读取到了末尾时,read()方法会返回一个-1
int lengh = 0;
while ((lengh = fis.read(bs)) != -1) {
// 将bs数据写入目标文件中
fos.write(bs, 0, lengh);
// 强制刷新fos流
fos.flush();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
// 关闭字节输出流
fos.close();
// 关闭字节输入流
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} else {
System.out.println("源文件不存在,请重试");
}
}
}
2.利用缓冲流对文本文件进行复制粘贴
package May.Tenth.IO_Buffered;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
/**
* 复制一个文本文件
* @author Jia
*
*/
public class CopyJpgFile {
public static void main(String[] args) {
new CopyJpgFile().copyJPGFile("E:/Javatest/1.txt","E:/Javatest/1" );
}
public void copyJPGFile(String path1, String path2) {
// 创建源文件的对象
File file = new File(path1);
// 创建目标文件的路径
path2 = path2 + "/" + file.getName();
// 判断源文件是否存在
if (file.exists()) {
// 声明BufferedReader、BufferedWriter对象
BufferedReader br = null;
BufferedWriter bw = null;
try {
// 创建BufferedReader、BufferedWriter对象,参数为对应的节点流对象
br = new BufferedReader(new FileReader(file));
bw = new BufferedWriter(new FileWriter(path2));
// 循环读取源文件,readline()方法每次返回一行源文件内容,读到源文件末尾时,返还一个null对象
String str = null;
while ((str = br.readLine()) != null) {
// 将读取到的数据写到目标文件
bw.write(str);
// 强制刷新
bw.flush();
}
System.out.println("文件复制成功");
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
// 关闭对象
bw.close();
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}else{
System.out.println("文件未找到");
}
}
}
备注:文件加密下次再说