import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import javax.sql.rowset.CachedRowSet;
/*
* IO流分类:
* 流向分类
* 输入流 读取数据 FileReader Reader
* 输出流 写出数据 FileWriter Writer
*
*
* 数据类型分类
* 字节流
* 字节输入流 读取数据 InputStream
* 字节输出流 写出数据 OutputStream
* 字符流
* 字符输入流 读取数据 Reader
* 字符输出流 写出数据 Writer
*/
public class Work05 {
// 通过字符流复制一个文本文件
public static void main(String[] args) throws IOException {
// 源目录
File src = new File("6.jpg");
//目标目录
File dest = new File("bb.txt");
//copy01(src, dest);
//copy02(src, dest);
// copy03(src, dest);
// copy04(src, dest);
// copy05(src, dest);
copy06(src, dest);
}
// 第7种: 字节流的复制方法和字符流的复制方法相同(不做统一演示)
@SuppressWarnings("resource")
private static void copy06(File src, File dest) throws IOException {
//创建字节输入流
FileInputStream in = new FileInputStream(src);
//创建字节输出流
FileOutputStream out= new FileOutputStream(dest);
int len;
//定义byte数组
byte[] by=new byte[024];
while((len=in.read(by))!=-1){
out.write(by, 0, len);
out.flush();
}
in.close();
out.close();
}
//第五种:创建FileReader对象通过字符 复制一个文本文件(一次读一个数组)
@SuppressWarnings("resource")
private static void copy05(File src, File dest) throws IOException {
//创建输入流对象
FileReader fr = new FileReader(src);
//创建输出流对象
FileWriter fw = new FileWriter(dest);
//读写数据
int len;
char[] ch=new char[1024];
while((len=fr.read(ch))!=-1) {
fw.write(ch);
fw.flush();
}
//释放资源
fw.close();
fr.close();
}
//第四种:创建FileReader对象通过字符 复制一个文本文件(一次读一字符)
@SuppressWarnings("resource")
private static void copy04(File src, File dest) throws IOException {
//创建输入流对象
FileReader fr = new FileReader(src);
//创建输出流对象
FileWriter fw = new FileWriter(dest);
//读写数据
int ch;
while((ch=fr.read())!=-1) {
fw.write(ch);
}
//释放资源
fw.close();
fr.close();
}
//第三种:通过字符 缓冲流 复制一个文本文件(一次读一字符)
private static void copy03(File src, File dest) throws IOException {
// 创建读取缓冲区
BufferedReader br = new BufferedReader( new FileReader(src));
// 创建写入缓冲区
BufferedWriter bw = new BufferedWriter(new FileWriter(dest));
//定义一个int类型的变量,存储获取到数组的长度
int len ;
//调用read 一次读取一个数组,
while((len=br.read())!=-1){
/*
* void write(int c) 写入单个字符。
* write吧接受到的int数强转为char类型
* write方法的源码
* public void write(int c) throws IOException {
* synchronized (lock) {
if (writeBuffer == null){
writeBuffer = new char[writeBufferSize];
}
writeBuffer[0] = (char) c;
write(writeBuffer, 0, 1);
}
}
* */
bw.write(len);
//刷新
bw.flush();
}
//释放资源
bw.close();
br.close();
}
//二种:通过字符 缓冲流 复制一个文本文件(一次读一一个数组)
private static void copy02(File src, File dest) throws IOException {
// 创建读取缓冲区
BufferedReader br = new BufferedReader( new FileReader(src));
// 创建写入缓冲区
BufferedWriter bw = new BufferedWriter(new FileWriter(dest));
//定义一个int类型的变量,存储获取到数组的长度
int len ;
//定义一个char数组,用来存储获取到的字符,char数组的长度是1024的倍数
char[] ch=new char[1024];
//调用read 一次读取一个数组,
while((len=br.read(ch))!=-1){
//一次读取一个数组
bw.write(ch,0,len);
//刷新
bw.flush();
}
//释放资源
bw.close();
br.close();
}
//一种:通过字符 缓冲流 复制一个文本文件(一次读一行)
private static void copy01(File src, File dest) throws IOException {
// 创建读取缓冲区
BufferedReader br = new BufferedReader( new FileReader(src));
// 创建写入缓冲区
BufferedWriter bw = new BufferedWriter(new FileWriter(dest));
//定义一个字符串,储存读取到的字符串
String len ;
//调用redaline 一次读取一行,存入String类型的len
while((len=br.readLine())!=null){
//一次读取一行
bw.write(len);
//写一个换行符,这个换行符由系统决定
bw.newLine();
//刷新
bw.flush();
}
//释放资源
bw.close();
br.close();
}
}
复制图片和视频只能用字节流来复制,如果用字符流复制视频或者图片会出现数据丢失!