当前位置: 代码迷 >> 综合 >> java 第6节 标准流打印流 161复制多级文件夹
  详细解决方案

java 第6节 标准流打印流 161复制多级文件夹

热度:75   发布时间:2023-10-10 21:54:56.0
package copydir;import java.io.*;/*需求:把E:\\itcast 这个文件夹复制到模块目录下思路:1:创建数据源目录File对象,路径是E:\\itcast2:获取数据源目录File对象的名称(itcast)3:创建目的地目录File对象,路径名是模块名+itcast组成(myCharStream\\itcast)4:判断目的地目录对应的File是否存在,如果不存在,就创建5:获取数据源目录下所有文件的File数组6:遍历File数组,得到每一个File对象,该File对象,其实就是数据源文件数据源文件:E:\\itcast\\mn.jpg7:获取数据源文件File对象的名称(mn.jpg)8:创建目的地文件File对象,路径名是目的地目录+mn.jpg组成(myCharStream\\itcast\\mn.jpg)9:复制文件由于文件不仅仅是文本文件,还有图片,视频等文件,所以采用字节流复制文件*/
public class Copyss {public static void main(String[] args) throws IOException {String f = "D:\\photo";File srcDir = new File(f);String name = srcDir.getName();// System.out.println(name);// 创建 目的地对象File destDir = new File("stu\\src\\Copp");copayDir(srcDir,destDir);}// 复制文件夹private static void copayDir(File srcDir, File destDir) throws IOException {// 判断文件是否存在if(!destDir.exists()){destDir.mkdirs();}if(srcDir.isDirectory()){String srcname = srcDir.getName();;File newfolder = new File(destDir,srcname);if(!newfolder.exists()){newfolder.mkdirs();}File[] filearray = srcDir.listFiles();for (File file:filearray){copayDir(file,newfolder);}}else{File newFile = new File(destDir,srcDir.getName());CopyFile(srcDir,newFile);}}private static void CopyFile(File srcFile, File destFile) throws IOException {// 输入流BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcFile));BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destFile));byte[] bys = new byte[1024];int len;while ((len = bis.read(bys)) != -1){bos.write(bys,0,len);}bos.close();bis.close();}
}

注释版 

package com.itheima_08;import java.io.*;/*需求:把“E:\\itcast”复制到 F盘目录下思路:1:创建数据源File对象,路径是E:\\itcast2:创建目的地File对象,路径是F:\\3:写方法实现文件夹的复制,参数为数据源File对象和目的地File对象4:判断数据源File是否是目录是:A:在目的地下创建和数据源File名称一样的目录B:获取数据源File下所有文件或者目录的File数组C:遍历该File数组,得到每一个File对象D:把该File作为数据源File对象,递归调用复制文件夹的方法不是:说明是文件,直接复制,用字节流*/
public class CopyFoldersDemo {public static void main(String[] args) throws IOException {//创建数据源File对象,路径是E:\\itcastFile srcFile = new File("E:\\itcast");//创建目的地File对象,路径是F:\\File destFile = new File("F:\\");//写方法实现文件夹的复制,参数为数据源File对象和目的地File对象copyFolder(srcFile,destFile);}//复制文件夹private static void copyFolder(File srcFile, File destFile) throws IOException {//判断数据源File是否是目录if(srcFile.isDirectory()) {//在目的地下创建和数据源File名称一样的目录String srcFileName = srcFile.getName();File newFolder = new File(destFile,srcFileName); //F:\\itcastif(!newFolder.exists()) {newFolder.mkdir();}//获取数据源File下所有文件或者目录的File数组File[] fileArray = srcFile.listFiles();//遍历该File数组,得到每一个File对象for(File file : fileArray) {//把该File作为数据源File对象,递归调用复制文件夹的方法copyFolder(file,newFolder);}} else {//说明是文件,直接复制,用字节流File newFile = new File(destFile,srcFile.getName());copyFile(srcFile,newFile);}}//字节缓冲流复制文件private static void copyFile(File srcFile, File destFile) throws IOException {BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcFile));BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destFile));byte[] bys = new byte[1024];int len;while ((len = bis.read(bys)) != -1) {bos.write(bys, 0, len);}bos.close();bis.close();}}