正在回答
2回答
同学你好!
如果要拷贝文件夹,同学需要判断目录是否存在,不存在要创建,文件不存在,创建文件,并拷贝文件内容,需要用到遍历和递归,老师这里写了一个小例子,同学可以参考学习一下:
/* 将"E:/DTLFolder/ceshi"下的所有数据复制到"E:/DTLFolder/ceshi1"下 */ import java.io.*; public class ForDemo{ final static String SOURCESTRING = "E:/DTLFolder/ceshi"; final static String TARGETSTRING = "E:/DTLFolder/ceshi1"; public static void main(String[] args){ if(!(new File(SOURCESTRING)).exists()){ System.out.println("源文件" + SOURCESTRING + "不存在,无法复制!"); return; }else{ if((new File(SOURCESTRING)).isFile()){ copyFile(new File(SOURCESTRING),new File(TARGETSTRING)); }else if((new File(SOURCESTRING)).isDirectory()){ copyDirectory(SOURCESTRING,TARGETSTRING); } } } private static void copyFile(File sourceFile,File targetFile){ if(!sourceFile.canRead()){ System.out.println("源文件" + sourceFile.getAbsolutePath() + "不可读,无法复制!"); return; }else{ System.out.println("开始复制文件" + sourceFile.getAbsolutePath() + "到" + targetFile.getAbsolutePath()); FileInputStream fis = null; BufferedInputStream bis = null; FileOutputStream fos = null; BufferedOutputStream bos = null; try{ fis = new FileInputStream(sourceFile); bis = new BufferedInputStream(fis); fos = new FileOutputStream(targetFile); bos = new BufferedOutputStream(fos); int len = 0; while((len = bis.read()) != -1){ bos.write(len); } bos.flush(); }catch(FileNotFoundException e){ e.printStackTrace(); }catch(IOException e){ e.printStackTrace(); }finally{ try{ if(fis != null){ fis.close(); } if(bis != null){ bis.close(); } if(fos != null){ fos.close(); } if(bos != null){ bos.close(); } System.out.println("文件" + sourceFile.getAbsolutePath() + "复制到" + targetFile.getAbsolutePath() + "完成"); }catch(IOException e){ e.printStackTrace(); } } } } private static void copyDirectory(String sourcePathString,String targetPathString){ if(!new File(sourcePathString).canRead()){ System.out.println("源文件夹" + sourcePathString + "不可读,无法复制!"); return; }else{ (new File(targetPathString)).mkdirs(); System.out.println("开始复制文件夹" + sourcePathString + "到" + targetPathString); File[] files = new File(sourcePathString).listFiles(); for(int i = 0; i < files.length; i++){ if(files[i].isFile()){ copyFile(new File(sourcePathString + File.separator + files[i].getName()),new File(targetPathString + File.separator + files[i].getName())); }else if(files[i].isDirectory()){ copyDirectory(sourcePathString + File.separator + files[i].getName(),targetPathString + File.separator + files[i].getName()); } } System.out.println("复制文件夹" + sourcePathString + "到" + targetPathString + "结束"); } } }
如果我的回答解决了你的疑惑,请采纳,祝学习愉快~
好帮手慕柯南
2019-08-10 16:34:14
同学你好!
如果只是拷贝一个目录,比较简单
在原地址中取出目录的名字,然后在复制的地址中创建一个目录即可
但是通常目录下面会有目录以及文件,此时就会比较复杂:
1.首先判断原地址中的内容是文件还是目录,如果是目录在目标地址中创建一个目录。此时仍然需要继续遍历当前目录下面是否还有目录,直到目录下只有文件,没有文件夹
2.如果是文件,首先在目标地址相应的目录中创建文件,然后在进行文件内容的复制
这种就是老师代码中写的这种。同学现在理解可能会有点困难。建议同学在多积累点知识在回过头来看这个问题,会比较容易理解。
如果我的回答解决了你的疑惑,请采纳,祝学习愉快~
1. Java 零基础入门
- 参与学习 人
- 提交作业 3802 份
- 解答问题 11489 个
本阶段带你迈入Java世界,学习Java必备基础知识,基础语法、面向对象思想以及常用工具类的使用。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星