模仿Linux中的cp指令,用Java实现一个文件拷贝的程序,主要是采用File Output/Intput Stream来进行文件的读取和写入效果。在实现文件拷贝的过程中,会发生以下的几种情况。
1:源文件为文件
(1)目标文件为文件:如果两文件名称相同,则默认覆盖拷贝。如果不相同,则创建新的文件并且拷贝。
(2)目标文件为目录:如果目录中含有与输入名称同名的文件,默认为覆盖拷贝,否则创建新的文件并且拷贝。
2:源文件为目录或者不存在则无法拷贝
以下是实现代码
public class Main{ public static void main(String[] args)throws Exception{ File FromFile = new File(args[0]); File Tofile = new File(args[1]); if(FromFile.isDirectory()){//如果源file不存在或者是个目录,那么就没有办法完成拷贝 throw new Exception("目录无法拷贝"); } if(!FromFile.exists()){ throw new Exception("源file不存在"); } if(FromFile.exists() && FromFile.isFile() && !Tofile.isDirectory()) {//源file和目标file都是文件,目标file不是目录 Tofile.createNewFile(); InputStream inputStream = new FileInputStream(FromFile); OutputStream outputStream = new FileOutputStream(Tofile); handleCopy(inputStream, outputStream); } if(Tofile.exists() && Tofile.isDirectory() && FromFile.isFile() && FromFile.exists()){//源file和目标file都存在,源file是文件,目标file是目录 if(Tofile.getName().equals(FromFile.getParentFile().getName())){//如果是同一文件夹的文件拷贝 return; } String ToFileName = FromFile.getName();//拿到目标文件的名字 File to_file = new File(Tofile,ToFileName); to_file.createNewFile();//在目标目录下的创建和源名字相同的文件 InputStream inputStream = new FileInputStream(FromFile); OutputStream outputStream = new FileOutputStream(to_file); handleCopy(inputStream,outputStream); } } public static void handleCopy(InputStream inputStream, OutputStream outputStream)throws Exception{ long start = System.currentTimeMillis(); int len = 0; byte[] data = new byte[102400000];//缓冲区100MB if ((len = inputStream.read(data)) != -1){//假设读出来的文件不为空 outputStream.write(data,0,len); } long end = System.currentTimeMillis(); System.out.println("拷贝成功! 使用了:"+(end-start)+"毫秒"); inputStream.close(); outputStream.close(); } }如有问题希望大家指出,谢谢。