实现原理
在之前掌握了用Java进行文件的读与文件的写,所谓文件的拷贝就是利用程序作为一个中转站进行文件的内容从一个文件到另一个文件当中的过程。
使用文件输入流和输出流达到文件的拷贝
package iostudy.ioprogramme;
import java.io.*;
/**
* 使用文件输入流和输出流达到文件的拷贝
* 1、创建两个源文件--->输入的文件(源头)、写出的文件(目的地)
* 2、选择流--->FileInputStream输入流、FileOutputStream输出流
* 3、操作--->分段读取、分段写入--->缓冲容器(缓冲区)
* 4、强制刷新
* 5、分别关闭输入流和输出流--->先打开的后关闭
* @since JDK 1.8
* @date 2021/5/17
* @author Lucifer
*/
public class IoCopyNo1 {
public static void main(String[] args) {
//创建源
/*源文件*/
File src = new File("D:/workspace/practice/main/java/iostudy/ioprogramme/abc.txt");
/*目标文件*/
File dest = new File("D:/workspace/practice/main/java/iostudy/ioprogramme/def.txt");
//选择流
/*读取流*/
InputStream is = null;
/*写入流*/
OutputStream os =null;
//进行尝试操作
try {
/*读取流赋予文件读取流值*/
is = new FileInputStream(src);
/*写入流赋予文件写入流值*/
os = new FileOutputStream(dest);
//将文件读取到缓冲区
/*新建缓冲区(缓存容器)*/
byte[] flush = new byte[1024];
/*一次性接收的文件的长度*/
int temp = -1; //接受长度为-1开始
/*将文件读取的长度赋值予一次性接收的文件长度且!=-1时开始写入*/
while ((temp=is.read(flush))!=-1){
//将源文件内容写入目的文件
os.write(flush, 0, temp);
}
//关闭前刷新目的文件
os.flush();
}catch (FileNotFoundException e){
e.printStackTrace();
}catch (IOException e){
e.printStackTrace();
}finally {
//当前面都没有异常的时候尝试请求释放资源
try {
if (null!=os){
//后打开的文件先关闭,先关闭os
os.close();
}
}catch (IOException e){
e.printStackTrace();
}
//先打开的文件后关闭
try {
if (null!=is){
//请求关闭文件
is.close();
}
}catch (IOException e){
e.printStackTrace();
}
}
}
}
拷贝图片:--->方法一样,新建对象路径不一样
package iostudy.ioprogramme;
import java.io.*;
/**
* 使用文件输入流和输出流达到文件的拷贝
* 1、创建两个源文件--->输入的文件(源头)、写出的文件(目的地)
* 2、选择流--->FileInputStream输入流、FileOutputStream输出流
* 3、操作--->分段读取、分段写入--->缓冲容器(缓冲区)
* 4、强制刷新
* 5、分别关闭输入流和输出流--->先打开的后关闭
* @since JDK 1.8
* @date 2021/5/17
* @author Lucifer
*/
public class IoCopyNo1 {
public static void main(String[] args) {
//创建源
/*源文件*/
File src = new File("C:/Users/Administrator/Desktop/Test_Work/Test_Picture/staticPicture.jpg");
//这个操作可以完成图片内容的复制
/*目标文件*/
File dest = new File("C:/Users/Administrator/Desktop/Test_Work/Test_Copy_Picture/King.jpg");
//选择流
/*读取流*/
InputStream is = null;
/*写入流*/
OutputStream os =null;
//进行尝试操作
try {
/*读取流赋予文件读取流值*/
is = new FileInputStream(src);
/*写入流赋予文件写入流值*/
os = new FileOutputStream(dest);
//将文件读取到缓冲区
/*新建缓冲区(缓存容器)*/
byte[] flush = new byte[1024];
/*一次性接收的文件的长度*/
int temp = -1; //接受长度为-1开始
/*将文件读取的长度赋值予一次性接收的文件长度且!=-1时开始写入*/
while ((temp=is.read(flush))!=-1){
//将源文件内容写入目的文件
os.write(flush, 0, temp);
}
//关闭前刷新目的文件
os.flush();
}catch (FileNotFoundException e){
e.printStackTrace();
}catch (IOException e){
e.printStackTrace();
}finally {
//当前面都没有异常的时候尝试请求释放资源
try {
if (null!=os){
//后打开的文件先关闭,先关闭os
os.close();
}
}catch (IOException e){
e.printStackTrace();
}
//先打开的文件后关闭
try {
if (null!=is){
//请求关闭文件
is.close();
}
}catch (IOException e){
e.printStackTrace();
}
}
}
}
处理代码:
package iostudy.ioprogramme;
import java.io.*;
/**
* 使用文件输入流和输出流达到文件的拷贝
* 1、创建两个源文件--->输入的文件(源头)、写出的文件(目的地)
* 2、选择流--->FileInputStream输入流、FileOutputStream输出流
* 3、操作--->分段读取、分段写入--->缓冲容器(缓冲区)
* 4、强制刷新
* 5、分别关闭输入流和输出流--->先打开的后关闭
* @since JDK 1.8
* @date 2021/5/17
* @author Lucifer
*/
public class IoCopyNo1 {
public static void main(String[] args) {
copy("D:/workspace/practice/main/java/iostudy/ioprogramme/IoFileInputStream.java",
"D:/workspace/practice/main/java/iostudy/ioprogramme/abc.txt");
}
//封装成方法
/**
* 文件拷贝的方法
* 思考:利用递归制作文件夹的拷贝
* @param srcPath
* @param dastPath
*/
public static void copy(String srcPath, String dastPath){
//创建源
/*源文件*/
File src = new File(srcPath);
//这个操作可以完成图片内容的复制
/*目标文件*/
File dest = new File(dastPath);
//选择流
/*读取流*/
InputStream is = null;
/*写入流*/
OutputStream os =null;
//进行尝试操作
try {
/*读取流赋予文件读取流值*/
is = new FileInputStream(src);
/*写入流赋予文件写入流值*/
os = new FileOutputStream(dest);
//将文件读取到缓冲区
/*新建缓冲区(缓存容器)*/
byte[] flush = new byte[1024];
/*一次性接收的文件的长度*/
int temp = -1; //接受长度为-1开始
/*将文件读取的长度赋值予一次性接收的文件长度且!=-1时开始写入*/
while ((temp=is.read(flush))!=-1){
//将源文件内容写入目的文件
os.write(flush, 0, temp);
}
//关闭前刷新目的文件
os.flush();
}catch (FileNotFoundException e){
e.printStackTrace();
}catch (IOException e){
e.printStackTrace();
}finally {
//当前面都没有异常的时候尝试请求释放资源
try {
if (null!=os){
//后打开的文件先关闭,先关闭os
os.close();
}
}catch (IOException e){
e.printStackTrace();
}
//先打开的文件后关闭
try {
if (null!=is){
//请求关闭文件
is.close();
}
}catch (IOException e){
e.printStackTrace();
}
}