一.每次只读取一个字节,输出一个字节的方式来复制文件,代码如下:
package com.xiao.CopyFile;
import org.junit.Test;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* @Author 笑笑
* @Date 20:32 2018/05/06
*/
public class CopyFile_01 {
@Test
public void test_01(){
FileInputStream fis = null;
FileOutputStream fos = null;
try{
//文件的起始位置
fis = new FileInputStream("c:\\1.txt");
//文件将要复制到的位置
fos = new FileOutputStream("d:\\1.txt");
int len = 0;
//每读取一个字节,写入一个字节
while ((len = fis.read()) != -1){
fos.write(len);
}
}catch(IOException e){
throw new RuntimeException("文件复制失败!");
}finally{
try {
fos.close();
System.out.println("输出流资源已释放");
}catch (IOException e){
throw new RuntimeException("输出流资源释放失败!");
}finally {
try{
fis.close();
System.out.println("输入流资源已释放");
}catch (IOException e){
throw new RuntimeException("输入流资源释放失败!");
}
}
}
}
}
二.使用读取字节数组、输出字节数组的方式来复制文件(速度快),代码如下:
package com.xiao.CopyFile;
import org.junit.Test;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* @Author 笑笑
* @Date 20:52 2018/05/06
*/
public class CopyFile_02 {
@Test
public void test_01(){
FileInputStream fis = null;
FileOutputStream fos = null;
try{
//文件的起始位置
fis = new FileInputStream("c:\\1.txt");
//文件将要复制到的位置
fos = new FileOutputStream("d:\\1.txt");
//定义字节数组
byte[] b = new byte[1024];
int len = 0;
//复制文件
while((len = fis.read(b)) != -1){
//从数组的0索引位置开始输出,读取到几个有效字节,输出几个有效字节
fos.write(b,0,len);
}
}catch(IOException e){
throw new RuntimeException("文件复制失败!");
}finally {
try{
fos.close();
System.out.println("输出流资源已释放");
}catch (IOException e){
throw new RuntimeException("输出流资源释放失败!");
}finally {
try {
fis.close();
System.out.println("输入流资源已释放");
}catch (IOException e){
throw new RuntimeException("输入流资源释放失败!");
}
}
}
}
}