前话:
在下面的程序段中,将IOException进行抛出,未做try catch finally处理
正式内容:
/**
*程序段入口
*/
public static void task_1() throws IOException{
System.out.println("input path 1:");
//源文件对象,需要复制的文件
File file1 = getPath();
System.out.println("input path 2:");
//目的文件对象,复制到指定文件夹的对象
File file2 = getPath();
copyFile(file1,file2);
}
//从键盘录入文件夹路径,并判断属否为合法路径,返回一个File对象 public static File getPath() throws IOException{ BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in)); String line = null; File file = null; while ((line=bufr.readLine()) != null){ file = new File(line); //判断路径是否合法 if (file.exists()){ break; }else { System.out.println("wrong path, input again:"); } } return file; }/* * 主要功能程序段 * 整体思路仍然是使用递归 * */ public static void copyFile(File file1, File file2) throws IOException{ FileInputStream fis = null; FileOutputStream fos = null; //利用for循环遍历当前文件夹中每一个File对象 File[] files = file1.listFiles(); for (File f : files){ if (f.isDirectory()){ //如果是文件夹,需要现在file2中创建一个名称相同的文件夹, // 然后再递归到该文件夹里面,复制相应的文件 //对于创建的文件夹名称,需要获取到file2绝对路径,然后加上f的名称 File file = new File(file2.getAbsolutePath()+"\\"+f.getName()); file.mkdir(); //此处就需要进入新建的文件夹内部进行递归 //这样才能复制该文件夹内的文件 copyFile(f,file); }else { //如果是文件,就是用常规方法进行文件的复制 //在输出file2的文件名称 需要先获取到f的文件名称 然后加上file2的绝对路径 //这样就能创建一个名称相同的文件(注意此处需要加上 "\\") //之后再不断地复制内容 fis = new FileInputStream(f); fos = new FileOutputStream(file2.getAbsolutePath()+"\\"+ f.getName()); byte[] buf = new byte[1024]; int len = 0; while ((len=fis.read(buf)) != -1){ fos.write(buf, 0, len); } fis.close(); fos.close(); } } }