上次说了文件的读和写操作,文件拷贝其实就是把文件的读和写结合起来。其实现基本思想还是以程序为桥梁,一边不断的从src文件中读取数据流,同时写出到指定的dest文件中。前面说过,字节流可以处理一切格式的文件,可以把字符流看做字节流的特例,在进行处理时用read()和write()方法以及char[]数组进行读取和写出即可,其他部分是一样的。这里以字节流为例将文件的拷贝分为下面4个步骤:
1、建立联系 : 依程序为中心,用File对象建立源头文件(src)和目的地文件(dest)的联系,注意src必须存在且为文件,这里可以加一个判断;
2、选择流:文件输入流 InputStream FileInputStream
文件输出流 OutputStream FileOutputStream
3、操作:进行文件的拷贝,这里又分为两部分:读取和写出。不同于前面单独进行读写的时候,是将读到的内容打印在控制台,或者是将程序中的String写入到指定文件中,这里两个是同时进行操作的,即:程序将src读到的内容不断写出到指定文件中。注意有可能最后一部分输出流没有被读取到,这里我们使用方法flush(),它的作用是刷新此输出流并强制写出所有缓冲的输出字节。
1、建立联系 : 依程序为中心,用File对象建立源头文件(src)和目的地文件(dest)的联系,注意src必须存在且为文件,这里可以加一个判断;
2、选择流:文件输入流 InputStream FileInputStream
文件输出流 OutputStream FileOutputStream
3、操作:进行文件的拷贝,这里又分为两部分:读取和写出。不同于前面单独进行读写的时候,是将读到的内容打印在控制台,或者是将程序中的String写入到指定文件中,这里两个是同时进行操作的,即:程序将src读到的内容不断写出到指定文件中。注意有可能最后一部分输出流没有被读取到,这里我们使用方法flush(),它的作用是刷新此输出流并强制写出所有缓冲的输出字节。
4、释放资源:关闭两个流,这里注意为了确保所有字节都被读取到,我们一般默认先打开的流后关闭,即:先关闭输出流再关闭输入流。下面是我写的文件拷贝代码:
/**
* 文件的拷贝
* @param 源文件路径
* @param 目录文件路径
* @throws FileNotFoundException,IOException
* @return
*/
public static void copyFile(String srcPath,String destPath) throws FileNotFoundException,IOException {
//1、建立联系 源(存在且为文件)+目的地(文件可以不存在)
File src=new File(srcPath);
File dest=new File(destPath);
if(!src.isFile()){//不是文件或者为null
System.out.println("只能拷贝文件");
throw new IOException("只能拷贝文件");
}
//2、选择流
InputStream is=new FileInputStream(src);
OutputStream os=new FileOutputStream(dest);
//3、文件的拷贝 循环+读取+写出
byte[] flush=new byte[1024];
int len=0;
//读取
while(-1!=(len=is.read(flush))){
//写出
os.write(flush, 0, len);
}
os.flush();//强制刷出
//关闭流:先打开的后关闭
os.close();
is.close();
}
最后在主方法中声明两个文件即可。