文件copy 的三种方法 小结
package practise.javaSE.FileAndIO;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class TestFileCopy {
public static void main(String[] args) {
try{
//准备两个字符串代表源文件和目标文件
String s1 = "C:\\Users\\Administrator\\Desktop\\实际导入处理-new.txt";
String s2 = "D:/实际导入处理-new.txt";
//1.构造FileInputStream类型的对象与c:/a.txt文件关联
FileInputStream fis = new FileInputStream(s1);
//2.构造FileOutputStream类型的对象与c:/b.txt文件关联
FileOutputStream fos = new FileOutputStream(s2);
//3.不断地读取a.txt文件中的内容写入到b.txt文件中
System.out.println("正在玩命地拷贝...");
//方式一:可以实现文件的拷贝,当拷贝的文件稍大时则效率极低
int res;
while((res = fis.read()) != -1){
fos.write(res);
}
/*
* 方式二:准备一个和文件大小一样的缓冲区,一次性将文件的所有内容
* 读取出来然后写入目标文件
* 该方式的效率明显高于方式一,但该方式的缺点在于:
* 当文件过大时,无法申请和文件大小一样的缓冲区,真实物理内存不足
* */
//通过文件输入流来获取所关联文件的大小
int len = fis.available();
System.out.println("源文件的大小是:" + len);
//准备一个和文件大小一样的缓冲区
byte[] bArr = new byte[len];
//一次性将文件中的所有数据读取到缓冲区中
int res = fis.read(bArr);
System.out.println("实际读取到的数据大小是:" + res);
//一次性将缓冲区的所有数据写入到目标文件中
fos.write(bArr);
// 方式三:准备一个合适的缓冲区进行文件的拷贝 在以后的开发中推荐该方式
byte[] bArr = new byte[1024*8];
int res = 0;
//res表示实际读取的字节个数
while((res = fis.read(bArr)) != -1){
//表示将数组bArr中从下标为0开始的res个字节的数据写入文件
fos.write(bArr, 0, res);
}
System.out.println("文件拷贝成功!");
//4.关闭流对象并释放有关的资源
fos.close();
fis.close();
}catch(Exception e){
e.printStackTrace();
}
}
}