InputStream是一个抽象类,它的子类有FileInputStream
OutputStream是一个抽象类,它的子类有FileOutputStream
代码最关键的地方如下:
byte[] data = new byte[1024]; //开辟一个缓冲区,一边读,一边写
// 1、读取数据到数组之中,随后返回读取的个数
// 2、判断个数是否是-1,如果不是则进行写入
int len;
while ((len = input.read(data)) != -1){ //只要len不等于-1,则将data一直写入文件
output.write(data, 0, len);
}
记得运行如下程序时,要传两个参数
java LearnFileCopy D:\learnjava\VID_1.mp4 D:\learnjava\copyresult\VID_2.mp4
package com.tencent.baosen;
import java.io.*;
class FileUtil{
private File srcFile;
private File desFile;
public FileUtil(String srcFile, String desFile){
this(new File(srcFile), new File(desFile));
}
public FileUtil(File srcFile , File desFile){
this.srcFile = srcFile;
this.desFile = desFile;
}
public boolean copyFile(){
if(!this.srcFile.exists()){
System.out.println("源文件不存在");
return false;
}
if(!this.desFile.getParentFile().exists()){
this.desFile.getParentFile().mkdirs();
}
InputStream input = null;
OutputStream output = null;
try {
input = new FileInputStream(this.srcFile);
output = new FileOutputStream(this.desFile);
byte[] data = new byte[1024]; //开辟一个缓冲区,一边读,一边写
int len;
while ((len = input.read(data)) != -1){ //只要len不等于-1,则一直写下去
System.out.println("len="+len);
output.write(data, 0, len);
}
System.out.println("拷贝成功!");
return true;
} catch (IOException e) {
e.printStackTrace();
} finally {
if(input != null){
try {
input.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(output != null){
try {
output.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
System.out.println("拷贝失败!");
return false;
}
}
public class LearnFileCopy {
public static void main(String[] args) {
if(args.length != 2){
System.out.println("命令参数应该传入两个文件路径,请检查参数传入的是否正确");
System.exit(1);
}
FileUtil util = new FileUtil(args[0],args[1]);
boolean result = util.copyFile();
System.out.println(result?"拷贝成功":"拷贝失败");
}
}