当前位置: 代码迷 >> 综合 >> Java文件夹复制操作(FileInputStream、FileOutputStream)
  详细解决方案

Java文件夹复制操作(FileInputStream、FileOutputStream)

热度:69   发布时间:2023-11-25 15:28:43.0

Java文件夹复制操作

字节输入流FileInputStream、字节输出流FileOutputStream

  • 通过递归算法将源文件夹的文件及文件夹进行递归遍历
  • FileInputStream读取文件,通过FileOutStream将文件写到目标路径中
package IO流;import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;/*** 复制文件夹* * @author hp**/
public class Test3 {public static void main(String[] args) {File source = new File("d:/temp");File target = new File("d:/temp2/Test");listFiles(source, target);System.out.println("复制完毕!");}/*** 罗列文件及文件夹* 递归遍历执行copyFile方法最终实现文件夹复制* @param source* @param target*/public static void listFiles(File source, File target) {//定义File数组File[] files = null;if (source.exists()) {//将source路径下的所有文件列出来,通过listFiles方法返回File数组files = source.listFiles();}if(!target.exists()) {//target目标文件夹不存在时,创建target文件夹target.mkdirs();System.out.println("创建一个"+target.getAbsolutePath()+"文件夹");}//如果source文件下存在文件及文件夹执行for循环语句if(files!=null) {for(int i=0;i<files.length;i++) {//创建一个File对象File temp=new File(target,files[i].getName());//判断是否是文件,false则是文件夹if(files[i].isFile()) {//执行copuFile()方法复制文件copyFile(files[i],temp);}else {//当for循环遍历到一个文件夹时,递归调用listFiles()方法listFiles(files[i],temp);//重要操作!!!}}}}/*** 复制文件* @param source* @param target*/public static void copyFile(File source, File target) {// 定义变量FileInputStream fi = null;FileOutputStream fo = null;try {// 初始化IO流对象fi = new FileInputStream(source);fo = new FileOutputStream(target);// 定义字节数组,用来存放输入流读取的字节byte[] b = new byte[1024];// 定义一个整型len,主要用来记录输入流读取字节长度,// 1 判断文件是否读取完毕 2 确定输出流写入到文件的字节数int len = 0;// 输入流读取文件到末尾时,返回-1while ((len = fi.read(b)) != -1) {// 输出流将字节数组写入到文件中去fo.write(b, 0, len);}System.out.println(source.getAbsolutePath()+"--->>>"+target.getAbsolutePath()+"复制完成!");} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {// 关闭IO流!!!if (fi != null) {try {fi.close();} catch (IOException e) {e.printStackTrace();}}if (fo != null) {try {fo.close();} catch (IOException e) {e.printStackTrace();}}}}}

运行结果

创建一个d:\temp2\Test文件夹
d:\temp\44588de6-41d3-4622-b853-0a66396cba39.jpg--->>>d:\temp2\Test\44588de6-41d3-4622-b853-0a66396cba39.jpg复制完成!
创建一个d:\temp2\Test\a文件夹
创建一个d:\temp2\Test\a\a文件夹
创建一个d:\temp2\Test\a\a\a文件夹
创建一个d:\temp2\Test\a\a\a\a文件夹
d:\temp\a\a\a\test2.zip--->>>d:\temp2\Test\a\a\a\test2.zip复制完成!
d:\temp\a\a\test2.zip--->>>d:\temp2\Test\a\a\test2.zip复制完成!
d:\temp\a\test2.zip--->>>d:\temp2\Test\a\test2.zip复制完成!
d:\temp\a\新建位图图像.bmp--->>>d:\temp2\Test\a\新建位图图像.bmp复制完成!
d:\temp\a\新建文本文档.txt--->>>d:\temp2\Test\a\新建文本文档.txt复制完成!
d:\temp\b3d83a8c-1696-427d-b847-bc14509cd276.jpg--->>>d:\temp2\Test\b3d83a8c-1696-427d-b847-bc14509cd276.jpg复制完成!
d:\temp\f0da2deb-5d4f-46ad-bc9a-e9c962360db4.jpg--->>>d:\temp2\Test\f0da2deb-5d4f-46ad-bc9a-e9c962360db4.jpg复制完成!
d:\temp\f151a814-4a98-4e66-9bb3-c8d610975041.jpg--->>>d:\temp2\Test\f151a814-4a98-4e66-9bb3-c8d610975041.jpg复制完成!
创建一个d:\temp2\Test\test文件夹
创建一个d:\temp2\Test\test\e文件夹
d:\temp\test\e\test2.txt--->>>d:\temp2\Test\test\e\test2.txt复制完成!
d:\temp\test\e\test3.txt--->>>d:\temp2\Test\test\e\test3.txt复制完成!
d:\temp\test\e\test4.txt--->>>d:\temp2\Test\test\e\test4.txt复制完成!
d:\temp\test\test2.txt--->>>d:\temp2\Test\test\test2.txt复制完成!
d:\temp\test\test3.txt--->>>d:\temp2\Test\test\test3.txt复制完成!
d:\temp\test\test4.txt--->>>d:\temp2\Test\test\test4.txt复制完成!
d:\temp\test.txt--->>>d:\temp2\Test\test.txt复制完成!
d:\temp\test.xmind--->>>d:\temp2\Test\test.xmind复制完成!
d:\temp\test.zip--->>>d:\temp2\Test\test.zip复制完成!
d:\temp\test2.txt--->>>d:\temp2\Test\test2.txt复制完成!
d:\temp\test2.zip--->>>d:\temp2\Test\test2.zip复制完成!
d:\temp\test3.txt--->>>d:\temp2\Test\test3.txt复制完成!
d:\temp\test4.txt--->>>d:\temp2\Test\test4.txt复制完成!
复制完毕!

-------如果想使用BufferedInputStream、BufferedOutputStream进行文件夹复制操作的话,可以将FileInputStream、FileOutputStream作为节点流操作即可

例如:

BufferedInputStream br=new BufferedInputStream(new FileInputStream);
BufferedOutputStream br=new BufferedOutputStream(new FileOutputStream);

  相关解决方案