您的位置:首页 > 编程语言 > Java开发

java种复制文件的N种方法

2017-07-02 11:19 337 查看
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();
}
}
复制图片和视频只能用字节流来复制,如果用字符流复制视频或者图片会出现数据丢失!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息