今天讲实际一点的操作。文件的拷贝复制移动
在这里插入代码片
package com.bjpowernode.javase.day35.homework;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class Test {
/*
拷贝文件
拷贝的过程应该是一边读一边写
使用以上的字节流拷贝文件的时候,文件类型随意,万能的
什么样的文件都能拷贝
*/
public static void main(String[] args) {
FileInputStream fis = null;
FileOutputStream fos = null;
try {
//创建一个输入流对象
fis = new FileInputStream("C:\\Ruby\\pro\\bb.jpg");
//创建一个输出流对象
fos = new FileOutputStream("C:\\Ruby\\pro\\aa\\bb\\cc\\bb.jpg");
//最核心的一边读一边写
byte[] bytes = new byte[10*1024];//10kb(一次最多拷贝10kb)
int readCount = 0;
while ((readCount=fis.read(bytes)) != -1){
fos.write(bytes, 0,readCount);
//这里比较容易有点疑问,在我上一篇中画的思维导图我们知道写的操作是覆写,
//但是注意我们明确的说了一条写的操作不管怎么改本次操作内容都是覆写,
//显然使用while循环做的操作是每一次都是一个新的写操作。
}
//刷新输出流最后要刷新
fos.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
//分开抓异常,一起try其中一个出现异常可能会影响另一个流的关闭
if (fos != null ){//= =应该都会快捷键吧
//不会搜索idea快捷键或者eclipse快捷键百度
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (fis != null){
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
核心内容都在代码里面了。虽然这些都不是实际应用,但是养成好习惯写finally关闭流并且注意要分别抓每条流的异常避免因为不同的流直接的异常导致问题。
移动原理我也在思维导图中一画出,从磁盘读入内存,再从内存写到磁盘。边读边写。因为全部读完再写占内存。