编写程序实现文件的复制,要求如下:
(1)通过键盘录入被复制的文件的路径和目标文件的路径;
(2)如果被复制的文件是文件夹,则需要复制文件夹内所有的子文件;
具体操作如下:
package com.zhb.test03;
import java.io.*;
import java.util.Scanner;
/*
(1)通过键盘录入被复制的文件的路径和目标文件的路径;
(2)如果被复制的文件是文件夹,则需要复制文件夹内所有的子文件
*/
//我的想法:由于输入输出流传入的都是文件名,要实现(2)的话我选中用String截取要复制的文件夹的每一个文件的名称
//具体写法如下:
public class Test {
public static void main(String[] args) throws IOException {
Scanner sc = new Scanner(System.in);
InputStream in = null;//定义输入流
OutputStream out = null;//定义输出流
try {
byte[] buff = new byte[1024];//常用写法,读写文件效率高
int len;
System.out.println("输入复制文件的路径");
File source = new File(sc.next());
//如果是文件则无需遍历,是文件夹则直接遍历
if (source.isFile()) {
in = new FileInputStream(source);
} else if (source.isDirectory()) {
File[] files = source.listFiles();//获取复制文件夹里所有文件的数组
System.out.println("输入目标文件的路径");
File target = new File(sc.next());
for (File file : files) {//遍历文件夹中的每个文件
in = new FileInputStream(file);
String fileName = String.valueOf(file);//获取当次遍历的文件名
int index = fileName.lastIndexOf("\\");//获取文件名所在的最后一个分隔符
File targetFile = new File(String.valueOf(target) + fileName.substring(index));//目标文件夹+复制文件夹的文件名
out = new FileOutputStream(targetFile);
while ((len = in.read(buff)) != -1) {//读写文件,同下
out.write(buff, 0, len);
}
}
return;//如果是复制文件夹的内容则跳过复制文件
}
System.out.println("输入目标文件的路径");
out = new FileOutputStream(sc.next());
while ((len = in.read(buff)) != -1) {
out.write(buff, 0, len);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
if (in != null) {
in.close();
}
if (out != null) {
out.close();
}
System.out.println("文件复制成功!");
}
}
}